基于harris角点和RANSAC算法的图像拼接matlab仿真

news/2024/10/1 19:27:29

1.算法运行效果图预览

 

 

 

2.算法运行软件版本

MATLAB2022a

 

3.算法理论概述

       Harris角点检测是一种局部特征检测方法,它寻找图像中具有显著局部曲率变化的位置,即边缘转折点或角点。主要通过计算图像窗口内的自相关矩阵M,并对其特征值进行评估。Harris响应函数H由自相关矩阵M的两个主特征值 λ1​ 和λ2​ 计算得到:

 

 

 

当H值较大时,窗口内像素的变化足够大,表明可能存在角点。

 

       在图像拼接过程中,RANSAC用于在两幅图像的重叠区域找到正确的对应点对,即使数据中存在大量噪声和异常点。

 

1.随机选择一组候选点对作为基础模型(通常是仿射或透视变换模型),计算此模型参数。

 

 

 

2.应用模型参数A预测所有剩余点对是否符合模型,统计一致样本数。

 

3.重复步骤1和2一定次数(迭代次数T),选取一致样本数最多的模型作为最优模型。

 

4.设定阈值(如变换残差阈值t),确定最终的内点集合(即那些变换误差小于阈值的所有点对)。

 

5.使用内点集合重新估计变换参数,以提高精度。

 

综上所述,图像拼接流程:

 

在每幅图像中检测Harris角点,并提取特征描述符。

利用匹配算法(如SIFT、SURF等)在重叠区域找到对应的角点对。

应用RANSAC算法找出最优变换模型。

根据最优变换模型对一幅图像进行几何校正,使两幅图像的重叠部分对齐。

最后,对齐后的图像通过融合算法(如加权平均、高斯金字塔融合等)拼接成全景图像。

 

 

 

4.部分核心程序

I1_harris   = func_harris(img1,3,para_harris,scales);% 使用自定义函数计算 img1 的角点响应
I2_harris   = func_harris(img2,3,para_harris,scales);% 使用自定义函数计算 img2 的角点响应
.........................................................................
% RANSAC 方法参数设定
% RANSAC 迭代次数
Miter = 500;
% 内点距离阈值
lvls  = 0.003;
% 最小内点数量要求
nums  = 10;
% RANSAC
[ransac_points,~]=func_ransac(harris_p1,harris_p2,mpoint,Miter,lvls,nums);% 存储 RANSAC 匹配得到的正确匹配点坐标
Lens         =length(ransac_points);
X1_r=zeros(1,Lens);
Y1_r=zeros(1,Lens);
X2_r=zeros(1,Lens);
Y2_r=zeros(1,Lens);for i=1:Lensp1=ransac_points(i,1);p2=ransac_points(i,2);X1_r(i)=x1(p1);Y1_r(i)=y1(p1);X2_r(i)=x2(p2);Y2_r(i)=y2(p2);
endfigure
subplot(1,2,1);
imshow(img1);
title('RANSAC匹配点')
hold on;
plot(Y1_r,X1_r,'ro');subplot(1,2,2);
imshow(img2);
title('RANSAC匹配点')
hold on;
plot(Y2_r,X2_r,'go');
% 合成一幅图像展示 RANSAC 匹配结果
figure
img_match=[img1,img2];
imshow(img_match);
title('匹配结果')
hold on;
plot(Y1_r,X1_r,'rx','LineWidth',1,'MarkerSize',8);
plot(Y2_r+size(img1,2),X2_r,'gx','LineWidth',1,'MarkerSize',8);Xm1_ransac=X1_r; 
Ym1_ransac=Y1_r;
match1=zeros(Lens,2);
match1(:,1)=Xm1_ransac; 
match1(:,2)=Ym1_ransac;Xm2_ransac=X2_r;
Ym2_ransac=Y2_r+size(img1,2);
match2=zeros(Lens,2);
match2(:,1)=Xm2_ransac; 
match2(:,2)=Ym2_ransac;
% 绘制匹配线段连接匹配点
for i=1:Lenshold on;plot([match1(i,2) match2(i,2)], [match1(i,1) match2(i,1)],'LineWidth',1)
end
% 计算 RANSAC 方法得到的仿射变换矩阵
H_ransac = func_affine(X2_r,Y2_r,X1_r,Y1_r);%生成一张新的全景图
[I1_ransac,I2_ransac]=func_trans(img1,img2,H_ransac);figure
I_ransac= I1_ransac+I2_ransac ;
imshow(I_ransac);
title('RANSAC拼接结果')

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29541.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

go学习笔记——Kratos框架

官方文档https://go-kratos.dev/en/docs/getting-started/start/1.安装Go 参考:mac安装go1.20 2.安装Kratos框架 kratos依赖protobuf grpc等框架,需要先进行安装brew install grpc brew install protobuf brew install protoc-gen-go brew install protoc-gen-go-grpc验证pro…

m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下:遗传优化迭代过程:误码率对比:2.算法涉及理论知识概要低密度奇偶校验码(Low-Density Parity-Check Code, LDPC码)因其优越的纠错性能和近似香农极限的潜力,在现代通信系统中扮演着重要角色。归一化最小和(Normalized Min-Sum, NMS)…

交流接触器

一般按负载电流的1.5倍选择;

stm32 出现 hard fault 的排查记录

参考链接:https://blog.csdn.net/qq_43118572/article/details/1327596261、先验知识先验知识1: cortex m3 在中断/异常时,会把 8 个寄存器(xPSR、PC、LR、R12 以及R3-R0)的值压入栈。入栈顺序以及入栈后堆栈中的内容如下(CM4 是从低地址到搞地质):地址 寄存器 被保存的…

stm32 将外部 Flash挂载在 SPI 出现数据传输时好时不好的排查过程

现象: 将外部 Flash 挂载在 SPI,在 hardware_init() -> read_jedec_id() 里的 result = spi->wr(spi, cmd_data, sizeof(cmd_data), recv_data, sizeof(recv_data)) 中, recv_data 的值经常不一致,result 的值偶尔为 SFUD_SUCCESS, 大部分会 Error。备注: 正常情况…

(8)ILA介绍

一、ILA简介二、ILA使用 在IP Catalog中选择搜索ila,选择第一个:接下来进行一些参数的配置: 配置好后生成即可: 一般情况下选择额ooc模式,可以节省资源。 在IP Sources中可以看到生成的ila ip核,比较重要的是这个.veo文件,这个相当于是ila的一个例化的模板,将该模板直接…