图像匹配Matlab程序

clear;
clc;
reference_img=imread('optical1.tif');%提取原始图片作为基准
target_img=imread('optical2.tif');%要求进行匹配的图像
subplot(2,3,1);%显示原始图像
imshow(reference_img);
title('原始图像');
subplot(2,3,2);%显示进行匹配的图像
imshow(target_img);
title('目标图像');
[Ix,Iy]=size(target_img);%取出图片大小
x=[160,103,102,209];%自己选定的特征点
y=[116,246,160,299];
u=[87,35,34,141];
v=[21,151,66,204];
Px=polyfit(x,u,1);%映射函数求解
Py=polyfit(y,v,1);
for i=1:Ix
for j=1:Iy
m=i*Px(1,1)+Px(1,2);%映射函数
n=j*Py(1,1)+Py(1,2);
m_integer=floor(m);%对映射值进行取整
n_integer=floor(n);
m_decimal=m-m_integer;%对映射值取小数
n_decimal=n-n_integer;
if(ge(m_integer,Ix)||ge(n_integer,Iy)||lt(m_integer,0)||lt(n_integer,0)||m_integer==0||n_integer==0)%判断映射点是否满足条件
result_img(i,j)=0;
result_img3(i,j)=0;
else
result_img(i,j)=target_img(m_integer,n_integer);%没有进行插值
result_img3(i,j)=(1-m_decimal)*(n_decimal*target_img(m_integer,n_integer+1)+(1-n_decimal)*target_img(m_integer,n_integer))+m_decimal*(n_decimal*target_img(m_integer+1,n_integer+1)+(1-n_decimal)*target_img(m_integer+1,n_integer));%双线性插值
end
if result_img(i,j)==0%把没有进行插值图像和原始图像进行组合
result_img2(i,j)=reference_img(i,j);
else
result_img2(i,j)=result_img(i,j);
end
if result_img3(i,j)==0%把插值后图像和原始图像进行组合
result_img4(i,j)=reference_img(i,j);
else
result_img4(i,j)=result_img3(i,j);
end
end
end
subplot(2,3,3);%显示未插值图像匹配
imshow(result_img,[]);
title('未插值图像匹配');
subplot(2,3,4);%显示未插值图像匹配组合
imshow(result_img2,[]);
title('未插值图像匹配组合')
subplot(2,3,5);%显示双线性插值后图像匹配
imshow(result_img3,[]);
title('双线性插值后图像匹配');
subplot(2,3,6);%显示双线性插值后图像匹配组合
imshow(result_img4,[]);
title('双线性插值后图像匹配组合');


相关文档
最新文档