|
楼主 |
发表于 2009-7-21 15:44
|
显示全部楼层
图像配准验证程序,一运行就死机
下面这个程序是验证图像配准算法Fourier-Mellin的,但是一运行Matlab就死机,没有什么致命错误,可以得到最终结果的,请高手指点一下啊。
clear all
tic
F = imread('F:\256楼宇图像.bmp');
I= imread('F:\256楼宇待配准图像.bmp');
Fgray=rgb2gray(F);
Igray=rgb2gray(I);
Fgray=double(Fgray);
Igray=double(Igray);
FDFT0=fft2(Fgray);
IDFT0=fft2(Igray);
FDFT=fftshift(FDFT0);
IDFT=fftshift(IDFT0);
FDFT=log(1+abs(FDFT));
IDFT=log(1+abs(IDFT));
% Pow=abs(FDFT0);
%
% theta=(180/pi)*angle(FDFT0);
% %图像一,显示两幅图像及其DFT图
% figure
% subplot(2,2,1),imshow(F),title('楼宇基准图像');
% subplot(2,2,2),imshow(FDFT,[]),title('楼宇基准图像DFT');
% subplot(2,2,3),imshow(I),title('楼宇待配准图像');
% subplot(2,2,4),imshow(IDFT,[]),title('楼宇待配准图像DFT');
% %**************************************************************************
% [M,N]=size(FDFT0);
% for j=1:1:M
% for k=1:1:N %Matlab数组下标是从1开始的,note!
% r=Pow(j,k);
% theta_yuansu=theta(j,k);
% DFT_Polar(j,k)=Pow(j,k)*exp(i*theta_yuansu);
% % DFT_LPM(j,k)=log(Pow(j,k))*exp(i*theta_yuansu);
% end
% end
% %图像二:显示FFT变换后频谱,转换为极坐标后,极坐标图示
% figure
% polar(DFT_Polar),title('图2:频谱图像转换为极坐标系下显示');
% %**************************************************************************
% loglog(I_lp)logpolar.m是自定义的对数极坐标函数,其原型详见
%F:\Program Files\MATLAB71\work\图像FFT变换\logpolar.m
[FI_lp,FI_nearest,FI_bilinear] = logpolar(abs(FDFT0),256);
% figure
% subplot(2,2,1),imshow(FDFT,[]),title('基准图像DFT');
% subplot(2,2,2),imshow(FI_lp),title('FLog_Polar');
% subplot(2,2,3),imshow(FI_nearest),title('FI_nearest');
% subplot(2,2,4),imshow(FI_nearest),title('FI_nearest');
[II_lp,II_nearest,II_bilinear] = logpolar(abs(IDFT0),256);
% figure
% subplot(2,2,1),imshow(IDFT,[]),title('待配准图像DFT');
% subplot(2,2,2),imshow(II_lp),title('ILog_Polar');
% subplot(2,2,3),imshow(II_nearest),title('II_nearest');
% subplot(2,2,4),imshow(II_nearest),title('II_nearest');
%
%
%**************************************************************************
%*****************2009.7.18*********
%接下来是在对数极坐标实现Fourier位移变换理论,在对得到的傅里叶变换,计算其互功率谱,然后逆变换,得到脉冲函数。
Flog_DFT=fft2(double(FI_bilinear));
Ilog_DFT=fft2(double(II_bilinear));
% figure
% imshow(log(1+abs(Flog_DFT)),[]);
II_conj=conj(Ilog_DFT);
FI_fenzi=(Flog_DFT).*II_conj;
FI_fenmu=abs(FI_fenzi);
FI=FI_fenzi/FI_fenmu;
FI_ifft=real(ifft(FI));
mesh(FI_ifft);
colormap bone;
%**************************************************************************
figure
imshow(FI_ifft),title('脉冲函数');
toc %计算算法运行时间
[ 本帖最后由 那谁 于 2009-7-21 15:45 编辑 ] |
|