FTfengtao 发表于 2011-7-1 15:42

基于FFT的图像匹配

结果不对,望指教。
% 文件名: ImageMatch_2.m
% 功能: 基于FFT相关法的图像匹配
% 改进: 旋转
%%%%%%%%%%%%%%%基于FFT的图像匹配%%%%%%%%%%%%%
clc
clear all

% 设定参数
Size = 128;

% 读取原始图像和待匹配图像的数据并显示
SrcIm = imread('E:\Image\lena.bmp');
TmpIm = imread('E:\Image\tmp.bmp');
= size(SrcIm);
= size(TmpIm);
figure, imshow(SrcIm)
figure, imshow(TmpIm)

% 二维FFT
Width = 2 ^ ceil(log2(SrcWidth));
Height = 2 ^ ceil(log2(SrcHeight));
SrcIm = fft2(double(SrcIm), Width, Height);
TmpIm = fft2(double(TmpIm), Width, Height);

% 二维FFT中心化
SrcIm = fftshift(SrcIm);
TmpIm = fftshift(TmpIm);

% 提取幅谱
SrcIm = abs(SrcIm);
TmpIm = abs(TmpIm);

% 原始图像、待匹配图像转化对数极坐标图像
SrcPolar = imlogpolar(SrcIm, Size, Size, 'bilinear');
TmpPolar = imlogpolar(TmpIm, Size, Size, 'bilinear');

% 极坐标图像的二维FFT
SrcData = fft2(SrcPolar, Size, Size);
TmpData = fft2(TmpPolar, Size, Size);

% 计算矩阵相关系数
TmpData = conj(TmpData);
CC = SrcData .* TmpData;
for i = 1 : Size
    for j = 1 : Size
      CC(i, j) = CC(i, j) / abs(CC(i, j));
    end
end

% 二维IFFT
Data = ifft2(CC);
Data = abs(Data);
figure, surf(Data)

% 计算CC的峰值
= max(Data);
= max(fMax);
PosY = PosY(PosX);

% 计算旋转角度
Theta = (PosX - 1) * 360 / Size;

if Theta > 180
    Theta = Theta - 360;
end

FTfengtao 发表于 2011-7-2 14:46

回复 1 # FTfengtao 的帖子

自己顶一下

ChaChing 发表于 2011-7-3 14:56

或许专业不同, 个人总觉得LZ问得不清!?

FTfengtao 发表于 2011-7-6 16:17

回复 3 # ChaChing 的帖子

不好意思,我的意思是我上面的程序有问题,希望大家看看,问题在哪??谢谢

tangqingting 发表于 2011-7-6 16:50

回复 1 # FTfengtao 的帖子

不太看得懂

ChaChing 发表于 2011-7-6 21:51

回复 4 # FTfengtao 的帖子

我想我没表达清楚, 建议LZ看下, 或许有所体会
5.建议提问的网友分清 编程问题 和 专业问题 http://forum.vibunion.com/thread-36746-1-1.html
6.提问的智慧!!!!(发帖前请认真阅读) http://forum.vibunion.com/thread-21991-1-1.html

huang888885555 发表于 2011-7-20 10:52

楼主你好旋转角度的结果作出来了吗   上面的imlogpolar命令代码你有吗

傅立叶 发表于 2013-10-14 17:02

for i=1:Size中的Size的大小不知道

wanxiaoliu 发表于 2013-11-1 15:06

谢谢楼主,学习一下{:{44}:}
页: [1]
查看完整版本: 基于FFT的图像匹配