图像拼接(融合)算法—matlab代码

寻找两图像色差差异最小处进行左右拼接

拼接+融合

clc;clear;close all;
img1=imread('试验图 1.bmp');%左图

img2=imread('试验图 2.bmp');%右图

% figure;imshow(img1);%显示

% figure;imshow(img2);
figure;
% subplot(2,1,1);
imshow([img1 img2]);%直接拼接

title('直接拼接');
%% RGB 值提取
R1=img1(:,:,1);
G1=img1(:,:,2);
B1=img1(:,:,3);
R2=img2(:,:,1);
G2=img2(:,:,2);
B2=img2(:,:,3);
%% 计算,寻找差异最小列

A=[];
for x=4096:-1:(4096-99)
y=1:100;
R11=mean(R1(:,x));
G11=mean(G1(:,x));
B11=mean(B1(:,x));
R22=mean(R2(:,y));
G22=mean(G2(:,y));
B22=mean(B2(:,y));
DR=abs(R11-R22);DG=abs(G11-G22);DB=abs(B11-B22);
DR=double(DR);DG=double(DG);DB=double(DB);
A1=(DR.^2+DG.^2+DB.^2).^0.5;
end
[x,y]= find(A1==min(min(A1)));
P=(4096-y)+1;%左图的列数

Q=y;%右图的列数

%% 截取矩形部分图像,完成图像拼接

[a,rect] = imcrop(img1,[1,1,P,2048]);
[b,rect] = imcrop(img2,[Q+1,1,4096-Q,2048]);
figure;
imshow([a b]);%拼接

title('最贴近拼接');
%% 图像融合

%读入原图 (左 右)

img1=imread('试验图 1.bmp');
img2=imread('试验图 2.bmp');
[H,W,k]=size(img2);
l_r=y;%重叠宽度(W-宽 至 W)—重合区宽

L=W+1-l_r;%左边起点

R=W;%右边尾点

n=R-L+1;%重叠宽度:就是 l_r
%直接拼接图

im=[img1,img2(:,n:W,:)];%1 全图+2 的后面部分

% 图像融合消除拼接缝隙

%用的渐入渐出融合即:距离权重融合

%[H,Y,t]=size(im);
C=im;%继承前图

% n=拼缝宽;
for j=1:n
d=1-(j)/n;%disp(d);% 距离权重

C(1:H,L+j,:)=d*A(1:H,j,:)+(1-d)*B(1:H,j,:);%互补融合

end
%end
C=uint8(C);
figure;
imshow(C);title('直接融合拼接图');%%%最理想处理

你可能感兴趣的:(matlab,算法,图像处理)