基于ORB算法的图像匹配

基础理论

2006RostenDrummond提出一种使用决策树学习方法加速的角点检测算法,即FAST算法,该算法认为若某点像素值与其周围某邻域内一定数量的点的像素值相差较大,则该像素可能是角点。

其计算步骤如下:

1)基于FAST算法进行特征点的提取

2)特征点附加方向

Matlab程序

ORB算法的Matlab主程序代码实现如下:
%% 主程序
% 读取图像
im1 = imread('baby1.JPG');
im2 = imread('baby2.JPG');
scale = [1, 0.75, 0.5, 0.25];
im1_grey = rgb2gray(im1);
im2_grey = rgb2gray(im2);
% FAST算法进行特征点的提取及得分计算
[corner1, fscore1] = fast9(im1_grey,20, 1);
[corner2, fscore2] = fast9(im2_grey,20, 1);
% 非极大值抑制
[corner1,fscore1] = FAST_filter(im1_grey,corner1,fscore1);
[corner2,fscore2] = FAST_filter(im2_grey,corner2,fscore2);
% 提取 Harris 特征点及得分
H1 = harris(im1_grey);
H2 = harris(im2_grey);
harris1 = H1(sub2ind(size(H1),corner1(:,2),corner1(:,1)));
harris2 = H2(sub2ind(size(H1),corner2(:,2),corner2(:,1)));
% 利用Harris得分优化 FAST 特征点
[~,idx1] = sort(harris1);
[~,idx2] = sort(harris2);
cnr1 = corner1(idx1(1:400),:);
cnr2 = corner2(idx2(1:400),:);
% 特征点附加方向提取
angle1 = orientation(im1_grey,[cnr1(:,2),cnr1(:,1)]);
angle2 = orientation(im2_grey,[cnr2(:,2),cnr2(:,1)]);
% 计算BRIEF附加旋转
run('sampling_param.m')
br1 = rBRIEF(im1_grey,cnr1,sample,angle1);
br2 = rBRIEF(im2_grey,cnr2,sample,angle2);
% 寻找匹配点 
matches = findmatches(br1,br2, cnr1, cnr2);
% 匹配点(注意,存在大量异常值!)
feature1 = matches(:,1:2);
feature2 = matches(:,3:4);
%随机样本一致性(RANdom SAmple Consensus,RANSAC)
%去除异常值是必要的一步!
[H,inlr] = computeHomography(feature1,feature2,3,1000);
% 转置、画图;
Hp = H';
tform = projective2d(Hp);
I = imwarp(im1,tform,'OutputView', imref2d(size(im2)));
I = uint8((double(I) + double(im2))./2);
%% 匹配结果显示
newImg = cat(2,im2_grey,im1_grey); %两张图像并排显示
figure;imshow(newImg)
% imwrite(newImg,'match2.jpg');
hold on
plot(feature2(:,1),feature2(:,2), 'ro','MarkerSize',5,'LineWidth',0.7)
plot(feature1(:,1)+size(im2,2),feature1(:,2), 'm*','MarkerSize',5,'LineWidth',0.7)
for i = 1:size(matches,1)
    plot([matches(i,3) matches(i,1)+size(im2,2)],[matches(i,4) matches(i,2)],'c')
end
% title('ORB图像匹配结果')
frame=getframe(gcf);
im=frame2im(frame);
imwrite(im,'ORB图像匹配结果.jpg');

案例图片

基于ORB算法的图像匹配结果 

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

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

相关文章

个人实现的QT拼图游戏(开源),QT拖拽事件详解

文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6dd66befd314442adf07e1dec0d550c.png 引言 在学习QT demo时,发现有一个拼图demo,介绍拖…

LLVM 环境配置

这里选择下载源码, 然后编译的安装方式。 下载地址 (在这里可以找到多版本, 多平台的LLVM下载资源) # 解压源码 sudo tar xvf llvm-project-17.0.6.src.tar.xz # 新建安装目录 sudo mkdir -p /usr/local/llvm # 新建编译目录 sudo mkdir -p llvm-project-17.0.6.src/build #…

非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (I - 原理与算法)

Title: 非线性最小二乘问题的数值方法 —— 狗腿法 Powell’s Dog Leg Method (I - 原理与算法) 文章目录 I. 前言II. 线搜索类型和信赖域类型1. 线搜索类型 —— 最速下降法2. 信赖域类型3. 柯西点 III. 狗腿法的原理1. 狗腿法的构建2. 狗腿法的优化说明3. 狗腿法的插值权重 I…

Java中打印图案最常用的25个图案程序

Java是公认的最流行的编程语言,因为它的简单性和多功能性。还可以使用它开发各种应用程序,包括Web、移动和桌面应用程序。此外,Java为开发人员提供了强大的工具来轻松高效地创建复杂的程序。Java最有前途的特性之一是它能够创建可以以特定格式…

Linux环境下部署Tomcat(详细图文)

目录 一、下载地址 1.服务器不能联网情况下载 2.服务器能够联网 二、安装 1. Tomcat解压 2. Tomcat目录说明: 3. 重命名解压后的文件名 4. 配置环境变量 5. 修改配置文件 6.启动Tomcat 7.访问Tomcat 8. 停止Tomcat 一、下载地址 1.服务器不能联网情况下…

PyTorch视觉工具箱:图像变换与上采样技术详解(1)

目录 Pytorch中Vision functions详解 pixel_shuffle 用途 用法 使用技巧 注意事项 参数 数学理论公式 示例代码及输出 pixel_unshuffle 用途 用法 使用技巧 注意事项 参数 数学理论公式 示例代码及输出 pad 用途 用法 使用技巧 注意事项 参数 示例代码…

SMT回流焊工艺之回流温度曲线

引言 在SMT生产流程中,如何控制回焊炉的温度是非常重要的一环,好的炉温曲线图意味着可以形成良好的焊点。 上一期分享(SMT回流焊温度解析之锡膏焊接特性)中,我们着重介绍了SMT回流工艺中的锡膏焊接部分。本期内容主要…

Leetcode2957. 消除相邻近似相等字符

Every day a Leetcode 题目来源:2957. 消除相邻近似相等字符 解法1:遍历 分类讨论 遍历字符串 word,比较相邻的 3 个元素 word[i - 1]、word[i] 和 word[i 1],记 left_distance abs(mid - left),right_distance…

大模型背景下计算机视觉年终思考小结(二)

1. 引言 尽管在过去的一年里大模型在计算机视觉领域取得了令人瞩目的快速发展,但是考虑到大模型的训练成本和对算力的依赖,更多切实的思考是如果在我们特定的小规模落地场景下的来辅助我们提升开发和落地效率。本文从相关数据集构造,预刷和生…

rust使用protobuf

前言 c,java,go 等直接是用 ,具体就不说了,这章主要讲述rust 使用protobuf 这章主要讲述2种 1 > protoc protoc-gen-rust plugin 2> protoc prost-build 1:环境 win10 rustrover64 25-2 下载地址 https://github.com/protocolbu…

《WebKit 技术内幕》之四(3): 资源加载和网络栈

3. 网络栈 3.1 WebKit的网络设施 WebKit的资源加载其实是交由各个移植来实现的,所以WebCore其实并没有什么特别的基础设施,每个移植的网络实现是非常不一样的。 从WebKit的代码结构中可以看出,网络部分代码的确比较少的,它们都在…

2.4 网络层03

2.4 网络层03 2.4.7 路由表 1、什么是路由? 路由就是报文从源端到目的端的路径。当报文从路由器到目的网段有多条路由可达时,路由器可以根据路由表中最佳路由进行转发。 2、什么是路由表? 在计算机网络中,路由表&#xff08…

鸿蒙原生应用/元服务实战-AGC中几个菜单栏的关系

大家是否清楚AGC这几个菜单栏的相互关系? 我的元服务:点击后跳转到“我的应用”列表中的“HarmonyOS”页签,并且过滤出元服务。开发者可以在此模块中管理和运营元服务,例如创建元服务、发布元服务等。 我的应用:开发者…

2024最新Java高频面试题总结(附答案PDF)春招面试必备!

《Java面试全解析》1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃了阿里钉钉团队的 offer 回到了西安。 从…

Qt事件过滤

1.相关说明 监控鼠标进入组件、出组件、点击组件、双击组件的事件,需要重写eventFilter函数 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-&…

解决国内Linux服务器无法使用Github的方法

解决思路:修改Host https://www.ipaddress.com/ 利用上面的网站查询github.com和raw.githubusercontent.com的DNS解析的IP地址 最后,修改服务器的/etc/hosts 添加如下两行: 140.82.112.3 github.com 185.199.108.133 raw.githubuserconte…

04 MyBatisPlus之逻辑删除+锁+防全表更新/删除+代码生成插件

1 逻辑删除 1. 1 什么是逻辑删除 , 以及逻辑删除和物理删除的区别? 逻辑删除,可以方便地实现对数据库记录的逻辑删除而不是物理删除。逻辑删除是指通过更改记录的状态或添加标记字段来模拟删除操作,从而保留了删除前的数据,便于后续的数据…

flink operator 拉取阿里云私有镜像(其他私有类似)

创建 k8s secret kubectl --namespace flink create secret docker-registry aliyun-docker-registry --docker-serverregistry.cn-shenzhen.aliyuncs.com --docker-usernameops_acr1060896234 --docker-passwordpasswd --docker-emailDOCKER_EMAIL注意命名空间指定你使用的 我…

MeterSphere本地化部署实践

项目结构 搭建本地环境 安装JDK11,配置好JDK环境,系统同时支持JDK8和JDK11安装IEAD,配置JDK环境配置maven环境,IDEA配置(解压可以直接使用)无限重置IDEA试用期配置redis环境(解压可以直接使用) 配置kafka环境 安装mysql-5.7环境&#xff…

Java并发基础:一文讲清util.concurrent包的作用

java.util.concurrent包是 Java 中用于并发编程的重要工具集,提供了线程池、原子变量、并发集合、同步工具类、阻塞队列等一系列高级并发工具类,使用这些工具类可以极大地简化并发编程的难度,减少出错的可能性,提高程序的效率和可…