2011-04-24 1 views
2

숫자가있는 작은 회색조 이미지가 있습니다. 내 OCR 방법을 시도하기 위해서 바이너리로 변환해야합니다.주 윤곽선을 잃지 않고 문자의 회색 이미지를 이진수로 변환하는 방법은 무엇입니까?

임계 값으로 127을 사용하는 cvThreshold를 사용하면 숫자의 골격 주위에 그라데이션이 있기 때문에 이미지가 망가져 보입니다. 시도했지만 임계 값을 적용하기 전에 사용할 이미지 선명 화 기능을 찾을 수 없습니다.

누군가 포인터를 사용하고 있습니까?

original gray scale image은 조잡한 enter image description here이됩니다.

편집 : 바이너리로 이미지의 픽셀이 0 (검정) 또는 255 (흰색) 인 이진 이미지를 의미합니다.

EDIT2 : 아, 수정 로그를 보면 나를 웃게 만들었습니다.

+1

을 나는이 프로이트의 슬립이었다 바랍니다. –

+0

나는 이미지 처리가 처음인데, 아무 것도 말하지 않았거나 명백한 것으로 어리석은 실수를 저 지르면 제 감정을 상하게하기를 두려워하지 마십시오. – Haoest

+1

@Haoest : 친절한 사람이 이미 "게이 이미지"를 삭제하기 위해 제목을 편집 한 것으로 보입니다. 다른 기준을 적용 해 보셨습니까? –

답변

6

먼저 임계 값 변수로 재생하십시오. 응용 프로그램에 더 이상 처리를 추가하지 않고도 만족스러운 결과를 얻을 수 있습니다. 120, 110 또는 100을 사용하는 것은 어떻습니까?

어쨌든 과 매개 변수로 127을 사용하는 것과 같은 출력이 없습니다. 어쩌면 당신은 당신 편에서 뭔가 다른 것을하고있을 것입니다.

IplImage* input_img = cvLoadImage("6.png", CV_LOAD_IMAGE_UNCHANGED); 
if(!input_img) 
{ 
    std::cout << "ERROR: Failed to load input image" << std::endl; 
    return -1; 
} 

cvThreshold(input_img, input_img, 127, 255, CV_THRESH_BINARY); 

if(!cvSaveImage("out.png", input_img)) 
{ 
    std::cout << "ERROR: Failed to write image file" << std::endl; 
}  

cvReleaseImage(&input_img); 

입력 : enter image description here출력 : 내 코드 확인 enter image description here

+0

@Haoest 업데이트 답변. 코드 추가. – karlphillip

+0

무슨 뜻인지 알 겠어. 당신은 6에 대해 옳습니다. 127 임계 값이 결과를 산출합니다. 나는 하루 종일 문턱을 조정하고 조금 혼란스러워. 동시에 모든 숫자에 대해 작동하는 보편적 인 임계 값이 없습니다. 예를 들어, 127은 꽤 나쁜 "4"를 생성합니다 (http://i.imgur.com/mNyqI.png). 나는 뚱뚱한 6을 생산하는 높은 문지방을 유지하고, 그것을보기 위해 6을위한 나의 OCR 템플릿을 업데이트한다면 어떻게 생각하니? – Haoest

+0

CPU에 더 이상 가중치를주지 않으므로 그렇게해야합니다. 프로세싱을 과장하거나 성능을 저하시키는 위험은 없습니다.그러나이 경우에 도움이 될만한 가벼운 처리가있을 수 있습니다. 임계치 연산을 실행하기 직전에'cvSmooth (CV_BLUR) '로 이미지를 사전 처리한다면 어떨까요? 이것은 범용 문턱 질문에 대답하는 방법이 될 수 있습니다. 이렇게하려면 새 임계 값 매개 변수도 검색해야합니다. 테스트하는 데 몇 시간이 걸리면 시도해 볼 가치가 있습니다. – karlphillip

2

AForge.NET에서이를 수행하기위한 몇 가지 편리한 이미지 처리 알고리즘이 있습니다.

적응 형 임계 값에 대해서는 BradleyLocalThresholding을 참조하십시오.

+0

나는 지금이 문제를 해결하기 위해 일부 원시 메소드를 사용할 것입니다 - 템플릿을 업데이트하여 팻 (fat) 문자와 일치하도록 이름을 지정하십시오. 그게 부족한 것으로 판명되면 C# 코드를 포팅합니다. 감사. – Haoest

관련 문제