寻找两图像色差差异最小处进行左右拼接
拼接+融合
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('直接融合拼接图');%%%最理想处理