Необходимо построить нелинейную корреляцию между двумя изображениями. Выход представляет собой острый пик, когда изображения одинаковы. Если изображения отличаются, мы получаем разбросанный участок по поверхности.
Формула этой корреляции:
abs ( IFT( {FT(img1) FT(img2)} x {FT(img1) FT(img2)} / abs(FT(img1) FT(img2)) ) ).^2
Требуемый результат показан на рисунках PIC 1 similar vs dissimilar
Графики, описанные Моритсом, можно построить с помощью xcorr2() в Matlab. Я рисую для похожего и непохожего изображения, как показано: PIC 2 графики xcorr2
Однако мне нужна кривая с острыми пиками, как показано на PIC 1.
Вот код, который я написал:
a=imread('pepper.tiff')
b=imread('cameraman.tiff')
Fa=fftshift(fft2(a))
Fb=fftshift(fft2(b))
z= abs (ifft2( (Fa.*Fb) .* (Fa.*Fb) ./ abs(Fa.*Fb) ) );
surf(abs(z))
Но я получаю сумасшедшую кривую и не похожую на те, что на оригинальной картинке. Кто-нибудь знаком с графиками нелинейной корреляции? Спасибо