基于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 回复 1 # FTfengtao 的帖子
自己顶一下 或许专业不同, 个人总觉得LZ问得不清!? 回复 3 # ChaChing 的帖子
不好意思,我的意思是我上面的程序有问题,希望大家看看,问题在哪??谢谢 回复 1 # FTfengtao 的帖子
不太看得懂 回复 4 # FTfengtao 的帖子
我想我没表达清楚, 建议LZ看下, 或许有所体会
5.建议提问的网友分清 编程问题 和 专业问题 http://forum.vibunion.com/thread-36746-1-1.html
6.提问的智慧!!!!(发帖前请认真阅读) http://forum.vibunion.com/thread-21991-1-1.html
楼主你好旋转角度的结果作出来了吗 上面的imlogpolar命令代码你有吗 for i=1:Size中的Size的大小不知道 谢谢楼主,学习一下{:{44}:}
页:
[1]