毕设要用到MATLAB实现一个图像拼接算法,看了老师给的一个例子,对里面的很多代码的作用、用法、意义等都不懂,希望各位高手给点建议或者提供点资料~
下面是其中一个 .m 文件的代码~
A=imread('view1.bmp');
figure,imshow(A)
title('源图像A')
B=imread('view2.bmp');
[high,wid]=size(A); %求出第一幅图像的长和宽(size 数组维数 )
A1=double(A);
B1=double(B);
B2=B1;
A2=A1;
sub_A=A1(high/2-39:high/2,3*wid/4:3*wid/4+39);
sub_A=A1(high/2-39:high/2,end-39:end);
sub_B1=B1(11:50,11:50);
mod1=sub_A-sub_B1; %求出第一幅图像的固定两列的象素差值
mat1=sum(sum(mod1.*mod1)); %求出第一幅图像的两列的取出的所有象素的差的平方和
mat_best=mat1;
for x1=1:40:wid-20 %在水平方向上搜索间隔距离相等的两列的象素求其象素差值
for y1=1:40:high-40
sub_B=B1(y1:y1+39,x1:x1+39);
mod=sub_A-sub_B;
mat=sum(sum(mod.*mod));
if mat<=mat_best
mat_best=mat;
xx=x1; %定位到该搜索方向上最佳匹配所在的位置
yy=y1;
end
end
end
x=xx;
y=yy;
for x2=xx-30:xx+40 %在垂直方向上搜索间隔距离相等的两列的象素,求其象素差值
for y2=yy-20:yy+80
sub_B2=B1(y2:y2+39,x2:x2+39);
mod2=sub_A-sub_B2;
mat2=sum(sum(mod2.*mod2));
if mat2<=mat_best
mat_best=mat2;
x=x2; %定位到该搜索方向上最佳匹配所在的位置
y=y2;
end
end
end
x=140;
[high2,wid2]=size(A2);
a1=A2(1:high2,wid-x+1:wid);
b1=B2(1:high2,1:x);
a=double(a1);
b=double(b1);
d1O=linspace(1,0,x); %在1和0之间产生x行向量
d=1:high2;
d1=d1O';
[X1,y1]=meshgrid(d1,d); %meshgrid 为三维图形生成XY矩阵
im1=a.*X1;
d20=linspace(0,1,x);
d2=d20';
[X2,y2]=meshgrid(d2,d);
im2=b.*X2;
im11=uint8(im1);
im22=uint8(im2);
im3=imadd(im11,im22);
a_b=imadd(im11,im22);
aa=A2(1:high2,1:wid-x);
bb=B2(1:high2,x:wid);
D2=[aa a_b bb];
D2=[aa(:,1:wid2-x) a_b bb];
imwrite(D2,'6.bmp');
[本帖最后由 mooni 于 2009-4-21 18:16 编辑]