基于MATLAB的图像拼接技术实验报告
学 院:数信学院
专业班级: 12级信息工程1班
姓名学号:
实验名称:基于MATLAB的图像拼接技术
实验目的:利用图像拼接技术得到超宽视角的图像,用来虚拟实际场景。
实验原理:
基于相位相关的图像拼接技术是一种基于频域的方法,通过求得图像在频域上是相位相关特点来找到特征位置,从而进行图像拼接。其基本原理是基于傅氏功率谱的相关技术。该方法仅利用互功率谱中的相位信息进行图像配准,对图像间的亮度变化不敏感,而且所获得的相关峰尖突出,具有一定的鲁棒性和较高的配准精度。
基于相位相关法进行图像拼接的基本原理如下:假设f(x,y)表示尺寸 为MN的图像,该函数的二维离散傅里叶变换(DFT)为:
其中,F(u,v)是复变函数;u、v是频率变量,u=0,1,…,M-1,v=0,1,…,N-1;x、y是空间或图像变量。
二维离散傅里叶逆变换(IDFT)为:
其中,x=0,1,…,M-1;y=0,1,…,N-1。
设两幅图像、的重叠位置为(,),则图像、的互功率谱为:
其中,*为共轭符号,对上式两边进行傅里叶逆变换将在(,)处产生一个 函数。因此,只要检测上式傅里叶逆变换结果最大值的位置,就可以获得两幅图像间的评议量(,。具体算法步骤如下:
①读入两幅图片、(函数输入),并转换为灰度图像;
②分别对、做二维傅里叶变换,即:
A=() B=()
则通过A、B的简单的矩阵运算得到另一矩阵,即:
=B*.conj(A)/norm(B*.conj(A),1)
矩阵的二维傅里叶逆变换C在(,)处取得最大,可通过遍历比较C(i,j)大小即可找到该位置,并作为函数返回值。
四 实验程序
tic
x=[1 2;0 1];
a=imread('7.jpg'); %读取图片
b=imread('8.jpg');
figure
imshow(a);
figure
imshow(b);
imwrite(b,'160.jpg');
IMG={a,b}; %将图片存为元胞结构
num=size(IMG,2); %计算图片个数
move_ht=0; %累计平移量初值
move_wd=0;
for count=1:num-1
input1=IMG{count}; %读取图象
input11=imresize(rgb2gray(input1),[300,200]); %将图象转为灰度图像
input2=IMG{count+1};
input12=imresize(rgb2gray(input2),[300,200]);
F1=fft2(double(input11)); %二维傅里叶变换
F2=fft2(double(input12));
pdm=exp(1i*(angle(F1)-angle(F2))); %求互功率谱
cps=real(ifft2(pdm)); %傅里叶反变换,取冲激函数的实部
[i1,j1]=find(cps==max(max(cps))); %需找峰值点
HtTrans=i1-1; %得到平移量
WdTrans=j1-1;
if(i1>size(input2,1)/2)
HtTrans=HtTrans-size(cps,1);
end
if(j1>size(input2,2)/2)
WdTrans=WdTrans-size(cps,2);
end
move_ht=HtTrans; %最终平移量
move_wd=WdTrans;
ht=move_ht;wd=move_wd;
move_ht=move_ht+ht; %计