matlab图像拼接融合(四种方法)

matlab图像拼接融合(四种方法)matlab 图像拼接的四种方法 1 直接拼接 2 亮度调整后拼接 3 按距离比例融合 4 亮度调整后按距离比例融合流程 1 读入左 右图 并取出重合部分 并转化为亮度图 2 分别把每点的亮度值相加 得到一个比值 3 把比值乘以右图 4 再把左各右图拼接 5 权重融合左图重合区右图 相加 10

4。再把左 各 右图 拼接

5。权重融合

左图————重合区———————-右图(相加)

100%———–50%————————0%

0%————–50%————————100%

 

%读入原图 (左 右) img1=imread('2.jpg'); img2=imread('1.jpg'); 

matlab图像拼接融合(四种方法)matlab图像拼接融合(四种方法)

 

 

%查找它们的SIFT特征,并返回匹配点对---------------------特征匹配 开始 [des1, des2] = siftMatch(img1, img2); des1=[des1(:,2),des1(:,1)];%左右(x和y)交换 % 为过滤匹配准备参数 des2=[des2(:,2),des2(:,1)];% %用 基础矩阵F 过滤匹配的特征点对 matchs = matchFSelect(des1, des2) %匹配位置索引(掩码) des1=des1(matchs,:);%取出内点 des2=des2(matchs,:); % 画出匹配特征点的连接线(好点) drawLinedCorner(img1,des1,img2, des2) ; 

matlab图像拼接融合(四种方法)

 

1、直接拼接

 

[H,W,k]=size(img1);%图像大小 l_r=W-des1(1,2)+des2(1,2);%只取水平方向(第一个匹配点)重叠宽度 % 1、直接拼接------------------------------------------------- %[H,W,k]=size(img1); %l_r=405;%重叠宽度(W-宽 至 W)---如果不用特征匹配这里直接写重合区宽 L=W+1-l_r;%左边起点 R=W;%右边尾点 n=R-L+1;%重叠宽度:就是l_r %直接拼接图 im=[img1,img2(:,n:W,:)];%1全图+2的后面部分 figure;imshow(im);title('直接拼接图'); 

matlab图像拼接融合(四种方法)

 

2、亮度调整后拼接

 

%根据之前H矩阵找到的两幅图的重叠(l_r)部分 A=img1(:,L:R,:); B=img2(:,1:n,:); %A、B 是对应在两幅图中的重叠区域 % A=uint8(A); figure;imshow(A); % B=uint8(B);figure;imshow(B); % [ma,na,ka]=size(A); I1=rgb2gray(A);%转换为灰度图像 I1=double(I1);%转换为双精度 v1=0; I2= rgb2gray(B); I2=double(I2); v2=0; for i=1:ma for j=1:na %I1(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);%按点转化为灰度图 v1=v1+I1(i,j);%所有亮度值相加(和) %I2(i,j)=0.59*B(i,j,1)+0.11*B(i,j,2)+0.3*B(i,j,3); v2=v2+I2(i,j); end end %figure;imshow(I1,[]); %figure;imshow(I2,[]); %亮度比例,并按比例调整第二个图 k=v1/v2; BB2=img2(:,n:W,:)*k;%乘比值 im2=[img1,BB2];%拼接 figure;imshow(im2);title('调整亮度后拼接图'); 

 

3、按距离比例融合

 

%[H,Y,t]=size(im); C=im;%继承前图 D=im2;%继承前图(亮度) % n=拼缝宽; %for i=1:H %少一重循环 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,:);%互补融合 D(1:H,L+j,:)=d*A(1:H,j,:)+(1-d)*B(1:H,j,:)*k; end %end C=uint8(C); figure;imshow(C);title('直接融合拼接图');%3 D=uint8(D); figure;imshow(D);title('亮度处理后融合拼接图');%4 

matlab图像拼接融合(四种方法)

 

4、亮度调整后按距离比例融合

matlab图像拼接融合(四种方法)

完整的m文件:

 

%matlab图像拼接(四种方法) % 1、直接拼接, % 2、亮度调整后拼接, % 3、按距离比例融合, % 4、亮度调整后按距离比例融合 %流程: %1。读入左,右图,并取出重合部分,并转化为亮度图 %2。分别把每点的亮度值相加,得到一个比值 %3。把比值 乘以 右图 %4。再把左 各 右图 拼接 clear;close all,clc; %读入原图 (左 右) img1=imread('2.jpg'); img2=imread('1.jpg'); % figure;imshow(img1);%显示 % figure;imshow(img2); %查找它们的SIFT特征,并返回匹配点对---------------------特征匹配 开始 [des1, des2] = siftMatch(img1, img2); des1=[des1(:,2),des1(:,1)];%左右(x和y)交换 为基础矩阵F 过滤匹配准备参数 des2=[des2(:,2),des2(:,1)];% %用 基础矩阵F 过滤匹配的特征点对 matchs = matchFSelect(des1, des2) %匹配位置索引(掩码) des1=des1(matchs,:);%取出内点 des2=des2(matchs,:); % 画出匹配特征点的连接线(好点) drawLinedCorner(img1,des1,img2, des2) ; %------------------------------------------------------特征匹配 结束 [H,W,k]=size(img1);%图像大小 l_r=W-des1(1,2)+des2(1,2);%只取水平方向(第一个匹配点)重叠宽度 % 1、直接拼接------------------------------------------------- %[H,W,k]=size(img1); %l_r=405;%重叠宽度(W-宽 至 W)---如果不用特征匹配这里直接写重合区宽 L=W+1-l_r;%左边起点 R=W;%右边尾点 n=R-L+1;%重叠宽度:就是l_r %直接拼接图 im=[img1,img2(:,n:W,:)];%1全图+2的后面部分 figure;imshow(im);title('直接拼接图'); % 2、亮度调整后拼接------------------------------------------------- %根据之前H矩阵找到的两幅图的重叠(l_r)部分 A=img1(:,L:R,:); B=img2(:,1:n,:); %A、B 是对应在两幅图中的重叠区域 % A=uint8(A); figure;imshow(A); % B=uint8(B);figure;imshow(B); % [ma,na,ka]=size(A); I1=rgb2gray(A);%转换为灰度图像 I1=double(I1);%转换为双精度 v1=0; I2= rgb2gray(B); I2=double(I2); v2=0; for i=1:ma for j=1:na %I1(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);%按点转化为灰度图 v1=v1+I1(i,j);%所有亮度值相加(和) %I2(i,j)=0.59*B(i,j,1)+0.11*B(i,j,2)+0.3*B(i,j,3); v2=v2+I2(i,j); end end %figure;imshow(I1,[]); %figure;imshow(I2,[]); %亮度比例,并按比例调整第二个图 k=v1/v2; BB2=img2(:,n:W,:)*k;%乘比值 im2=[img1,BB2];%拼接 figure;imshow(im2);title('调整亮度后拼接图'); % 3、按距离比例融合------------------------------------------------- % 4、亮度调整后按距离比例融合---------------------------------------- % 图像融合消除拼接缝隙 %用的渐入渐出融合即:距离权重融合 %[H,Y,t]=size(im); C=im;%继承前图 D=im2;%继承前图(亮度) % n=拼缝宽; %for i=1:H %少一重循环 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,:);%互补融合 D(1:H,L+j,:)=d*A(1:H,j,:)+(1-d)*B(1:H,j,:)*k; end %end C=uint8(C); figure;imshow(C);title('直接融合拼接图');%3 D=uint8(D); figure;imshow(D);title('亮度处理后融合拼接图');%4 

 

 

 

matlab 7.0 运行

感谢 浮华三生 的评论!

我把siftMatch放在后面,并去掉matchFSelect函数,用上包上的findHomography函数。

先在 这里下 http://www.cs.ubc.ca/~lowe/keypoints/siftDemoV4.zip

%查找它们的SIFT特征,并返回匹配点对---------------------特征匹配 开始 [des1, des2] = siftMatch(img1, img2); %为单应矩阵过滤匹配准备参数 pts1=des1';pts2=des2'; %单应矩阵过滤匹配 [Ht matchs] = findHomography(pts1,pts2);%如无该函数,自行搜索“imMosaic”或“findHomography imMosaic”下载 pts1=pts1(:,matchs);%取出内点 pts2=pts2(:,matchs); des1=pts1';%格式转回 des2=pts2'; % 画出匹配特征点的连接线(好点) drawLinedCorner(img1,des1,img2, des2) ; %------------------------------------------------------特征匹配 结束

替换前面部分

修改match函数为siftMatch:

% 此函数读取两幅图像,查找它们的SIFT特征 % 仅当匹配的距离小于与第二个最接近匹配的距离的阈值时,才接受匹配。 % 它返回两个图像的匹配点,matchLoc1 = [x1,y1;x2,y2;...] % % function [matchLoc1 matchLoc2] = siftMatch(img1, img2) % 在每个图像查找 SIFT 特征点 [des1, loc1] = sift(img1); [des2, loc2] = sift(img2); % 对于MATLAB中的效率,计算单位向量之间的点乘比欧式距离更快捷。请注意: % 注意角的比率(单位矢量点积的反余弦)是小角度的欧氏距离之比的近似值。 % % distRatio: 在这两队匹配中只保留矢量角从最近的第二近邻的比值小于distRatio的。 distRatio = 0.7; % 在第一个图像中的每个描述符,选择它的匹配到第二个图像。 des2t = des2'; % 预计算矩阵转置 matchTable = zeros(1,size(des1,1)); for i = 1 : size(des1,1) dotprods = des1(i,:) * des2t; % 计算点积向量 [vals,indx] = sort(acos(dotprods)); % 取逆余弦和排序结果 % 看看和最近的邻居角比率小于distRatio。 if (vals(1) < distRatio * vals(2)) matchTable(i) = indx(1); else matchTable(i) = 0; end end % 保存匹配数据表 num = sum(matchTable > 0); fprintf('找到 %d 对匹配点.\n', num); idx1 = find(matchTable); idx2 = matchTable(idx1); x1 = loc1(idx1,2); x2 = loc2(idx2,2); y1 = loc1(idx1,1); y2 = loc2(idx2,1); matchLoc1 = [y1,x1];%把y坐标放前面 matchLoc2 = [y2,x2]; end

说明一下:

http://www.cs.ubc.ca/~lowe/keypoints/siftDemoV4.zip 还有findHomography的 https://github.com/erogol/Image_Stiching

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221374.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午6:16
下一篇 2026年3月17日 下午6:16


相关推荐

  • Tomcat报错—Tomcat内存溢出及大小调整

    本文记录一些常见的Tomcat经常出现的内存溢出问题,在查询大量数据和加载jar包出现异常。

    2022年2月24日
    46
  • 云服务器怎么配置cpu与内存搭配「建议收藏」

    云服务器怎么配置cpu与内存搭配「建议收藏」很多朋友在购买云服务器之前都会搜服务器一般用几核才够用,因为服务器现在配置很多。低到1核2G、2核4G。高到16核32G、32核64G。甚至某些云服务器可以做到256核5120G这种神奇配置。那么购买云服务器时如何选择cpu与内存搭配?出现资源不足时应如何排查原因呢?一、处理器性能解析首先要明确一点,虽然都是多少核。但是服务器的处理器性能还是有差异的。具体可以搜对应处理器CPU性能天梯。阿里云的服务器都是定制…

    2022年5月22日
    411
  • bool函数

    bool函数bool函数:(非原创)BOOL是布尔型变量,也就是逻辑型变量的定义符,类似于float、double等,只不过float定义浮点型,double定义双精度浮点型。在objective-c中提供了相似的类型BOOL,它具有YES值和NO值。布尔型变量的值只有真(true)和假(false),可用于逻辑表达式,也就是“或”“与”“非”之类的逻辑运算和大于小于之类的关系运算,逻辑表达式运算结果为真…

    2022年6月14日
    43
  • Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出[通俗易懂]

    Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出[通俗易懂]参考文献:【1】梯度计算问题含公式:参考链接1.【2】pytorch改动和.data和.detch()问题:https://blog.csdn.net/dss_dssssd/article/details/83818181【3】hook技术介绍:https://www.cnblogs.com/hellcat/p/8512090.html【4】hook应用->中间层的输出:https://blog.csdn.net/qq_40303258/article/details/10688431

    2025年7月18日
    6
  • GLM-4.7-Flash从零开始:Dify平台接入GLM-4.7-Flash模型教程

    GLM-4.7-Flash从零开始:Dify平台接入GLM-4.7-Flash模型教程

    2026年3月12日
    2
  • QT GUI编程

    QT GUI编程QT 程序设计 一 QT 基础 Qt 简介 Qt 应用范围开发环境 QtCreator 安装 Qt 内存管理第一个 Qt 程序打印跟踪信号与槽二 窗口部件三 主窗口四 QT 基础五 QT 基础六 QT 基础七 QT 基础持续更新中 一 QT 基础 Qt 简介 Qt 应用范围开发环境 QtCreator 安装 Qt 内存管理第一个 Qt 程序打印跟踪信号与槽二 窗口部件三 主窗口四 QT 基础五 QT 基础六 QT 基础七 QT 基础持续更新中

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号