作业4(非常简陋的对齐)

时间:2021-04-07 22:35:35

%读取图片,转化为pgm格式

im1=imread('003.png');

im2=imread('004.png');

im1=rgb2gray(im1);

im2=rgb2gray(im2);

imwrite(im1,'003.pgm','pgm');

imwrite(im2,'004.pgm','pgm');

im1=im2double(im1);

im2=im2double(im2);

 

 

%寻找对应特征点

%该函数来自下载的sift找特征的.m文件,返回的match1是图片1的特征在图片2匹配到的特征的位置,没有匹配到的为0。

[num,loc1,loc2,match1]=match('003.pgm','004.pgm'); 

 

%pair是两图中一对对匹配的点的坐标合集

pair=zeros(size(match1,2),4);

k=1;

for i=1:size(match1,2)

if match1(1,i)~=0

       pair(k,1)=loc1(i,1);

       pair(k,2)=loc1(i,2);

       pair(k,3)=loc2(match1(i),1);

       pair(k,4)=loc2(match1(i),2);

       k=k+1;

end

end

 

 

%拼接

%计算图二相对于图一总的偏移量

count=1;

de_y=0;

de_x=0;

for i=1:size(pair,1)

if pair(count,1)~=0

de_y=pair(i,3)-pair(i,1)+de_y;

de_x=pair(i,4)-pair(i,2)+de_x;

count=count+1;

end

end

de_y=ceil(de_y/(count-1));

de_x=ceil(de_x/(count+1));

 

%建立拼接平面

last=zeros(size(im1,1)*3,size(im1,2)*3);

 

%把第二张图放在中间

for i=1:size(im1,1)

for j=1:size(im1,2)

last(i+size(im1,1),j+size(im1,2))=im2(i,j);

end

end

 

%把第一张图拼到第二张图上

for i=1:size(im1,1)

for j=1:size(im1,2)

last(i+size(im1,1)+de_y,j+size(im1,2)+de_x)=im1(i,j);

end

end

 

figure,imshow(last);

 

作业4(非常简陋的对齐)

作业4(非常简陋的对齐)