基于MATLAB的图像拼接技术

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MATLAB的图像拼接技术

基于MATLAB的图像拼接技术实验报告

学院:数信学院

专业班级: 12级信息工程1班

姓名学号:

一、实验名称:基于MATLAB的图像拼接技术

二、实验目的:利用图像拼接技术得到超宽视角的图像,用来虚拟实际场景。

三、实验原理:

基于相位相关的图像拼接技术是一种基于频域的方法,通过求得图像在频

域上是相位相关特点来找到特征位置,从而进行图像拼接。其基本原理是

基于傅氏功率谱的相关技术。该方法仅利用互功率谱中的相位信息进行图

像配准,对图像间的亮度变化不敏感,而且所获得的相关峰尖突出,具有

一定的鲁棒性和较高的配准精度。

基于相位相关法进行图像拼接的基本原理如下:假设f(x,y)表示尺寸为MN的图像,该函数的二维离散傅里叶变换(DFT)为: ,

MN,,111,,,juxMvyN2(//) Fuvfxye,(,)(,),,MN,xy,,00

其中,F(u,v)是复变函数;u、v是频率变量,u=0,1,…,M-1,v=0,1,…,N-1;x、y是空间或图像变量。

二维离散傅里叶逆变换(IDFT)为:

N,1M,1,,juxMvyN2(//),fuve(,) Fxy(,),,,y,0x,0

,…,M-1;y=0,1,…,N-1。其中,x=0,1

设两幅图像、的重叠位置为(,),则图像、的互功率谱为:IIxyII112002

*II(,)(,),,,,,,,jxy,,,2()1200 ,eII(,)(,),,,,,12

其中,*为共轭符号,对上式两边进行傅里叶逆变换将在(x,y)处产生一00个函数。因此,只要检测上式傅里叶逆变换结果最大值的位置,就可以获得两xy幅图像间的评议量(,。具体算法步骤如下: 00

II?读入两幅图片、(函数输入),并转换为灰度图像; 12

II?分别对、做二维傅里叶变换,即: 12

fftIfftI A=() B=() 1222

C则通过A、B的简单的矩阵运算得到另一矩阵,即: 3

C =B*.conj(A)/norm(B*.conj(A),1) 3

矩阵的二维傅里叶逆变换C在(,)处取得最大,可通过遍历比较C(i,Cxy300 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; %计算累计平移量

move_wd=move_wd+wd;

if count==1 %拼接图像

coimage=my_move(input11,input12,move_ht,move_wd);

else

coimage=my_move(coimage,imput12,move_ht,move_wd);

end

end

coimage1=coimage(15:size(coimage,1)-12,:); %切割图像

figure

imshow(uint8(coimage));

toc

time=toc

imwrite(uint8(coimage),'161.jpg');

function coimage=my_move(input1,input2,move_ht,move_wd) %根据平移量拼接图像

total_ht=max(size(input1,1),(abs(move_ht)+size(input2,1)));

total_wd=max(size(input1,2),(abs(move_wd)+size(input2,2)));

combImage=zeros(total_ht,total_wd); %按照总大小建立矩阵

regimg1=zeros(total_ht,total_wd); %配准模板1

regimg2=zeros(total_ht,total_wd); %配准模板2

%根据平移量选择配准方式即选择拼接图像的位置

if((move_ht>=0)&(move_wd>=0))

regimg1(1:size(input1,1),1:size(input1,2))=input1;

regimg2((1+move_ht):(move_ht+size(input2,1)),(1+move_wd):(move_wd+size(i nput2,2)))=input2;

elseif((move_ht<0)&(move_wd<0))

相关文档
最新文档