基于MATLAB的Harris角点检测完成图片全景拼接

这篇具有很好参考价值的文章主要介绍了基于MATLAB的Harris角点检测完成图片全景拼接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

  1. 作业概要 1
  2. 原理及实现 1
    2.1. 模块1 Harris角点检测 1
  3. 根据角点响应函数计算每个像素点的角点响应值; 2
    2.2. 模块2 关键点的描述及其匹配 3
    2.2.1. 生成描述向量 3
    2.2.2. 匹配描述子 4
  4. 输出matched_points和匹配点对数count; 5
    2.3. 模块3 转换矩阵的估计 5
  5. 输出仿射变换矩阵H。 6
    2.4. 模块4 RANSAC 7
  6. 取前num_inliers个随机点对拟合仿射变换矩阵H; 8
    2.5. 模块5 梯度方向直方图 10
  7. 根据梯度方向分类(代码里写了一个分类器sorter); 11
    2.6. 模块6 更佳的图片融合策略(线性融合) 12
  8. 确定融合区域的左边界和右边界; 12
    2.7. 模块7 函数封装 14
    2.8. 模块8 Matlab自带的SURF实现 14
    2.9. 模块9 基于Matlab自带的SURF写的“全景拼接” 15
    2.10. 其他图片的匹配 16
  9. 总结 16

原理简介:
直接求解仿射变换矩阵的结果并不是很理想,这是因为在确定对应点时,我们的限制条件并不算精确,导致引入了许多无效数据。我们可以利用RANSAC方法来进一步对数据进行筛选,求解变换矩阵。
RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次数。
这里滤除误匹配对采用RANSAC算法寻找一个最佳变换矩阵H,矩阵大小为3×3。RANSAC目的是找到最优的参数矩阵使得满足该矩阵的数据点个数最多。由于仿射变换矩阵有6个未知参数,至少需要6个线性方程求解,对应到点位置信息上,一组点对可以列出两个方程,则至少包含3组匹配点对。同理透视变换就需要找4对点。作业中的RANSAC的主要步骤包括了:
1.随机选取对应点;
2.计算变换矩阵;
3.在给定的阈值范围内计算有效数据点数(inliers);
4.重复步骤1-3,记录下最多的有效点数;
5.利用有效的数据点和最小二乘法重新计算变换矩阵。

函数实现:
ransac.m

输入:
keypoints1:(m2)img1角点坐标索引矩阵。
keypoints2:(n
2)img2角点坐标索引矩阵。
matched_points:(p*2)矩阵,保存匹配上的角点的坐标。
iterations:RANSAC迭代次数。
thres:RANSAC误差阈值。
num_inliers:取num_inliers对点估计模型。

输出:
ransac_matched_points:(q*2)矩阵,保存RANSAC方法剔除误匹配后的匹配点坐标。
count_inliers:RANSAC方法剔除误匹配后的匹配点个数。

步骤:
1.随机打乱匹配点顺序,计算打乱后的匹配点坐标sub_matched1和sub_matched2;
2.取前num_inliers个随机点对拟合仿射变换矩阵H;
3.根据拟合出来的变换矩阵计算img1中的角点的变换结果sub_transed;
4.计算误差,这里误差的描述取sub_transed和sub_matched2的比值-1的绝对值;
5.计算sub_transed中小于误差的点的个数;
6.重复步骤1-4至设置好的迭代次数,记录下最多的内点数;
7.输出最多内点时的内点集合以及内点个数;
8.根据输出的内点集合重新拟合仿射变换矩阵。

误差描述好像还有其他方法,例如计算前后两个矩阵的范数等,可以采取一些扩大误差的方法得到更精确的内点集合。RANSAC迭代一定次数后计算结果不会变的更好。RANSAC方法迭代500次,误差阈值取0.003,比例阈值k取0.8时,一般会剔除220对左右的匹配点,效果如下:

function [t_img1,t_img2]=img_trans(img1,img2,affine_matrix)

T=affine_matrix;
Tr=[T(1,1),T(1,2),0;T(2,1),T(2,2),0;0 0 1];
Tx=T(1,3);
Ty=T(2,3);

Tr=affine2d(Tr);
followOutput = affineOutputView(size(img2),Tr,'BoundsStyle','FollowOutput');
t_img1=img1;
t_img2=imwarp(img2,Tr,'OutputView',followOutput);

if Tx>0
    methodx='post';
else
    methodx='pre';
end

if Ty>0
    methody='post';
else
    methody='pre';
end

t_img2=padarray(t_img2,abs(floor(Tx)),0,methodx);
t_img2=padarray(rot90(t_img2),abs(floor(Ty)),0,methody);
t_img2=rot90(t_img2);
t_img2=rot90(t_img2);
t_img2=rot90(t_img2);

t_img1=padarray(t_img1,abs(size(t_img2,1)-size(t_img1,1)),0,'post');
t_img1=padarray(rot90(t_img1),abs(size(t_img2,2)-size(t_img1,2)),0,'pre');
t_img1=rot90(t_img1);
t_img1=rot90(t_img1);
t_img1=rot90(t_img1);

end

harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接
harris角点检测matlab,matlab,算法,线性代数,harris,图片全景拼接文章来源地址https://www.toymoban.com/news/detail-796186.html

到了这里,关于基于MATLAB的Harris角点检测完成图片全景拼接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Harris角点检测

    图像特征的分类:边缘、角点、纹理。 角点检测(准确来说角点不是特征,但检测出来的角点可以用来提取和表示总结为特征)也被称为特征点检测,Harris是基于角点的特征描述子,主要用于图像特征点的匹配,属于图像的局部特征。 在局部小范围里,如果在各个方向上移

    2024年02月08日
    浏览(54)
  • OpenCV(四十二):Harris角点检测

    1.Harris角点介绍 什么是角点? 角点指的是两条边的交点,图中红色圈起来的点就是角点。 Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之后沿着多个方向移动我这个区域,再次计算新区域的像素值

    2024年02月07日
    浏览(53)
  • Python Opencv实践 - Harris角点检测

    参考资料:https://blog.csdn.net/wsp_1138886114/article/details/90415190  

    2024年02月09日
    浏览(46)
  • OpenCV 入门教程: Harris角点检测

    Harris 角点检测是图像处理中常用的角点检测算法,用于寻找图像中的角点特征。角点是图像中具有明显边缘变化的位置,具有独特性和不变性,常用于图像匹配、目标跟踪和特征提取等应用。本文将以 Harris 角点检测为中心,为你介绍使用 OpenCV 进行角点检测的基本原理、步

    2024年02月16日
    浏览(45)
  • opencv进阶14-Harris角点检测-cv2.cornerHarris

    类似于人的眼睛和大脑,OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后,可以将这些特征作为数据 库,支持基于图像的搜索。此外,我们可以使用关键点将图像拼接起 来,组成更大的图像。(想象一下把很多图片放到一起组成一幅360°的全景

    2024年02月11日
    浏览(87)
  • Harris和Shi-tomasi角点检测笔记(详细推导)

            一般来说,角点就是极值点,在某些属性上强度最大或者最小的孤立点、线段的终点或拐点等。其实理解角点可以按照我们的直觉来理解,以下图为例,图中用颜色标注的地方都是角点:         原图地址:理解经典角点检测算法–Harris角点 | 码农家园         

    2024年02月11日
    浏览(43)
  • python数字图像处理基础(八)——harris角点检测、图像尺度空间、SIFT算法

    原理 Harris 角点检测是一种用于在图像中检测角点的算法。角点是图像中局部区域的交叉点或者突出的特征点。Harris 角点检测算法旨在寻找图像中对于平移、旋转和尺度变化具有不变性的角点。 该算法通过计算图像中每个像素点的灰度值的变化,来识别角点。具体来说,Ha

    2024年01月19日
    浏览(45)
  • 模式识别与图像处理课程实验一:图像处理实验(颜色算子实验、Susan、Harris角点检测实验、 sobel边缘算子检测实验)

    要求编写一个包含颜色算子,Susan,Harris,角点,sobel边缘算子的程。 实验的程序如下 运行结果如下 实验原图 实验结果图 实验的程序如下 运行结果如下 实验原图 实验结果图 实验的程序如下 运行结果如下 实验原图 实验结果图 Susan角点检测程序如下 运行结果如下 实验原图

    2024年02月02日
    浏览(50)
  • opencv多张图片实现全景拼接

       最近camera项目需要用到全景拼接,故此查阅大量资料,终于将此功能应用在实际项目上,下面总结一下此过程中遇到的一些问题及解决方式,同时也会将源码附在结尾处,供大家参考,本文采用的opencv版本为3.4.12。   首先说一下此源码的大概执行流程,此项目进行全

    2024年01月17日
    浏览(46)
  • Python Opencv实践 - 全景图片拼接stitcher

            由于手里没有切割好的全景图片资源,因此首先写了一个切片的程序spliter。         如果有现成的切割好的待拼接的切片文件,则不需要使用spliter。         对于全景图片的拼接,需要注意一点,各个切片图片之间要有重复的内容以便opencv能够提取到关键点并

    2024年02月22日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包