声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5742|回复: 9

[图像处理] 图像配准里相位相关法,这幅图是怎么得到的

[复制链接]
发表于 2009-7-21 15:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我最近在研究图像配准,想在Matlab环境中验证Fourier-Mellin算法,我参考的文章是:《一种基于学习的自动图像配准检验方法》,其中相位相关法得到的效果图如附件1所示:

但是,我采用该算法却只得到峰值分布的平面图,如附件2所示:

如何将这个平面图转换为图1所示的三维效果呢??我用mesh、surf都试过了的,没有成功,请大家指点一二。

[ 本帖最后由 ChaChing 于 2010-8-2 00:13 编辑 ]

Fourier-Mellin算法应该得到的效果图

Fourier-Mellin算法应该得到的效果图

我的验证程序得到的效果图

我的验证程序得到的效果图
回复
分享到:

使用道具 举报

 楼主| 发表于 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 编辑 ]
256飞机灰度基准图.jpg
256飞机灰度待配准图像.jpg

logpolar.m

3.76 KB, 下载次数: 24

这是logpolar函数的原型,是将一幅图像转换为对数极坐标

logpolar.m

3.76 KB, 下载次数: 17

发表于 2009-7-21 17:43 | 显示全部楼层
这个图可以用mesh和surf画的呀,你的操作不对吧,看看help吧。

评分

1

查看全部评分

发表于 2009-7-21 23:51 | 显示全部楼层
个人感觉pcolor或许亦适用!
 楼主| 发表于 2009-7-23 16:51 | 显示全部楼层
的确用mesh或者surf就能画出来,由于我对Matlab不太熟悉,所以一开始没画对啊,谢谢大家帮忙。
polor函数,我也试了,但是画出来是一张彩色平面方格图,具体原因,我也不清楚。不过主要原因不是画图,应该是我的程序出的问题。

[ 本帖最后由 ChaChing 于 2010-8-2 00:23 编辑 ]
 楼主| 发表于 2009-7-23 17:07 | 显示全部楼层

计算两幅图像的互功率谱的Fourier逆变换

Q_fenzi=FDFT0.*conj(IDFT0);
Q_fenmu=abs(Q_fenzi);
Q=Q_fenzi./Q_fenmu;
q=real(ifft(Q));

我在Matlab环境中,用以上几行code计算图像F和图像I的互功率谱Q,采用的公式是参见附件1.
但是计算结果就是不符合预期结果,我都不知道那里出错啊??而且Q=Q_fenzi./Q_fenmu;其中到底该不该是点除./呢?还是直接就是/,请大家帮忙告诉我附件中的公式到底该用什么code实现。
我自己觉得应该是点除,因为Q_fenzi=FDFT0.*conj(IDFT0)得到的是一个复数矩阵,Q_fenmu=abs(Q_fenzi)得到的是该矩阵的幅值,矩阵里的每一个值对应的是原图像中的一个像素,所以应该是点除,进行矩阵对应元素运算,得到两幅图像中对应像素每点互功率谱。但是为什么这样还是得到预期结果,我实在是不知所以了。


PS.很不好意思,我最近发了好几个问题求助帖,主要是最近一直在做Matlab环境中图像配准算法的验证,但是起步阶段,难免问题多多,困难多多,望大家谅解帮助。

[ 本帖最后由 那谁 于 2009-7-23 17:25 编辑 ]
互功率谱公式.png
图像F和I.png
发表于 2010-8-1 16:54 | 显示全部楼层

回复 地板 那谁 的帖子

不知道你现在做出来了没有,上面的那个图是用mesh做出来的,我也是做着一方面的,已经做出来了!可能你的程序有问题吧!
发表于 2012-7-4 15:15 | 显示全部楼层
发表于 2012-7-10 21:25 | 显示全部楼层
图像拼接么?现在还没有接触这方面内容
之前做的图像配准都是基于标志点的……
发表于 2013-11-1 10:15 | 显示全部楼层
要好好学习
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-23 10:54 , Processed in 0.080225 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表