2012-05-18 3 views
1

흰색과 검정색 텍스트에서 문자를 감지하려고합니다. 현재 텍스트는 검은 색으로 된 몇 개의 문자 만있는 흰색 배경입니다. 또한 각각의 문자 하나만 포함 된 작은 이미지를 만들었습니다. 초기 텍스트에서 문자를 감지하기 위해 위상 상관 관계를 사용하려고합니다. 이를 위해 나는 짓을했는지 :위상 상관 문자

image = im2double(imread("text.png")); 
si = size(image); 

trans = fft2(image); 

ch = im2double(imread("a.bmp")); 
chtrans = fft2(ch,si(1),si(2));   

outt = angle(trans).*conj(angle(chtrans)); 

outt = abs(ifft2(outt)).^2; 

나는 예 모두 "A"내 텍스트뿐만 이미지가 두 배에 대한 감지 내 outt 변수 정상화시 : 정확한 결과가있다 그러나 정확한 결과가 뒤집혀도있어, 모두 같은 최종 이미지. 이게 뭐가 잘못 됐어?

+0

이미지를 게시하여 의미를 표시 할 수 있습니까? –

+0

다음은 최종 이미지입니다. http://img403.imageshack.us/img403/5256/problemau.png –

답변

1

IFFT에 다시 각도를 공급해도 위상이 분리되지 않습니다. 동일한 각도이지만 복소수가 1이 되길 원합니다. 에 각도를 나타내는 실수가 필요합니다.

outt = trans.*conj(chtrans); 
outt = outt ./ abs(outt); 
outt = real(ifft2(outt)); 

그것을 표현하는 다른 방법이 있지만 어떤 경우에, 미러 이미지가 사라집니다 : 위상 상관 관계를 표현하는 한 가지 방법은 공액 곱셈의 결과를 정상화하는 것입니다. 명심해야 할 것은 결과가 이상적으로 순수한 실제이어야한다는 것입니다. 모든 가상 구성 요소는 반올림 오류로 인해 발생합니다. 결과에 대해 abs()를 수행해야 할 필요가 있다고 판단되면 아마도 잘못된 결과를 보였을 것입니다.

+0

고맙습니다. 진폭 = 1로 처리하는 것이 더 나은 결과를 얻었 기 때문에 이해 한 문서를 읽었 기 때문에 단계 만 사용했습니다. 어쩌면 전체 이미지가 동일한지 (예 : 2 문자) 확인이 가능하지만이 경우에는 그렇지 않습니다. –

+0

오! 하나 더! abs (outt)에 0이 있으면이를 방지하는 가장 좋은 모드는 무엇입니까? 분열하기 전에 복근에 0.0000001을 추가 하시겠습니까? –

+0

아마 직접 처리 할 것이다.'a = trans. * conj (chtrans);''z = (a == 0); a (z) = 1; outt = a ./ abs (a); outt (z) = 0;'0으로 시작한 부분을 0으로 유지합니다. 또한이 정규화는 진폭 = 1을 설명대로 유지합니다 ... 이는 프로세스를 엉망으로 만드는 각도() 호출 일뿐입니다. – Peter

1

이것은 푸리에 변환의 특징입니다. 이것은 양수 및 음수 주파수 구성 요소를 감지합니다. 당신이 원하면 부정적 부분을 무시할 수 있습니다.

+0

ifft2를 수행 한 후에 이것을 추가했지만 복근이 생기기 전에 최종 이미지에서 음수를 지울 수 있습니다. extra = real (outt)> = 0; outt = real (outt). * extra + imag (outt). * extra; 이 코드에서 Extra는 outt 값이 0보다 큰 경우 1을 갖는 행렬이거나 0보다 작은 경우 0을 갖는 행렬입니다. 결과는 동일합니다. 그것은 여전히 ​​잘못입니다. –