ORB特征提取和匹配

2023-05-16

    • 一、步骤
    • 二、代码
    • 三、部分结果展示
          • 3.1 使用Sobel算子且方向为vertical,进行边缘检测
          • 3.2 特征点提取(部分)
          • 3.3 特征点匹配


一、步骤

Step1:读取彩色图片
1.新建实验用的文件夹,准备好实验用到的图片,在MATLAB2021a软件中编写相关脚本文件。
2.清理变量空间以及命令行。
3.用imread()函数读取彩色图片,使用imfuse()函数进行简单的图像复合用imshow()函数显示出来即可看到2张图的差异;将上诉3幅图用subplot()展示在一张figure中。
Step2:彩色图像转化为灰度图
1.直接使用rgb2gray()函数将上述2幅rgb图像转化为灰度图。
2.做与Step1一样的展示,这里使用imshowpair()函数来展示两种灰度图的差异。
3.使用edge()函数同时选用canny参数对灰度图进行canny算子边缘检测,修改sigma值。
4.采用与2相同的方式对结果进行展示。
Step3 对左右图像分别进行特征点提取:
1.使用detectORBFeatures()函数对灰度图进行特征点提取。
2.观察特征点变量发现两张图都提取出了9000余个特征点,不便直接展示出来。
3.分别展示出两幅灰度图的原图像,并在其基础上使用selectStrongest()函数分别展示其最大的3000个特征点。
Step 4:根据特征点生成图像的特征向量
使用extractFeatures()函数生成图像的特征向量。
Step 5:对左右图像提取的特征点进行匹配
1.使用matchFeatures()函数进行两张图的特征点匹配,返回6856*2的向量,即互相匹配的6856对点所对应的坐标索引。
2.使用showMatchedFeatures()函数显示结果,分别选用默认参数falsecolor和montage,
第一种参数将第一幅图显示为red,第二张图显示为cyan,放在一张图里面;而第二种参数则将两幅图并排显示。
Step 6: 预测几何变化,去除不满足变化的野值
1.使用estimateGeometricTransform()函数预测几何变化,选用不同参数,去除不满足变化的野值。
2.采用Step5中相似的方式显示结果 。


二、代码

clc
clear
close all

%%  Step1:读取彩色图片
img_left_color  = imread('orange1.PNG');
img_right_color = imread('orange2.PNG');

% 显示结果
figure('Name','Step1:读取彩色图片')
subplot('Position',[0.0 0.0 0.66 1])
imshow([img_left_color img_right_color])
title("左图和右图")
subplot('Position',[0.67 0.0 0.33 1])
imshow(imfuse(img_left_color, img_right_color))
title("左右图像差异")

%% Step2:彩色图像转化为灰度图
img_left_gray  = rgb2gray(img_left_color);
img_right_gray = rgb2gray(img_right_color);

% 显示结果
figure('Name','Step2:彩色图像转化为灰度图')
subplot('Position',[0.0 0.0 0.66 1])
imshow([img_left_gray img_right_gray])
title("左图和右图")
subplot('Position',[0.67 0.0 0.33 1])
imshowpair(img_left_gray,img_right_gray) %等效于 imshow(imfuse(img_left_gray, img_right_gray))
title("左右图像差异")

%% Step2.1:对灰度图进行边缘检测
img_left_edge  = edge(img_left_gray,'canny',[],1);      % 使用canny算子进行边缘检测
img_right_edge = edge(img_right_gray,'canny',[],1);     % 使用canny算子进行边缘检测

% 显示结果
figure('Name','Step2.1:对灰度图进行边缘检测')
subplot('Position',[0.0 0.0 0.66 1])
imshow([img_left_edge img_right_edge])
title("左图和右图")
subplot('Position',[0.67 0.0 0.33 1])
imshowpair(img_left_edge,img_right_edge)
title("左右图像差异")

%% Step3:对左右图像分别进行特征点提取
left_ORB_points  = detectORBFeatures(img_left_gray);
right_ORB_points = detectORBFeatures(img_right_gray);

% 显示结果
figure('Name','Step3:对左右图像分别进行特征点提取')
subplot('Position',[0.0 0.0 0.5 4])
imshow(img_left_gray);hold on;
title("部分左图特征点")
plot(left_ORB_points(1:2:9825,:),'showOrientation',true);
subplot('Position',[0.5 0.0 0.5 4])
imshow(img_right_gray);hold on;
title("部分右图特征点")
plot(right_ORB_points(1:2:9994,:),'showOrientation',true);

%% Step4:根据特征点生成图像的特征向量
[left_features,  left_ORB_points]  = extractFeatures(img_left_gray,  left_ORB_points);
[right_features, right_ORB_points] = extractFeatures(img_right_gray, right_ORB_points);

%% Step5: 对左右图像提取的特征点进行匹配
image_pairs = matchFeatures(left_features, right_features,'MatchThreshold',15); % 调整匹配阈值观察变化
left_matched_points  = left_ORB_points(image_pairs(:, 1), :);
right_matched_points = right_ORB_points(image_pairs(:, 2), :);

% 显示结果
figure('Name','Step5:对左右图像提取的特征点进行匹配')
subplot('Position',[0.0 0.0 0.66 1])
showMatchedFeatures(img_left_gray, img_right_gray, left_matched_points,right_matched_points, 'montage');
title("特征点匹配结果")
subplot('Position',[0.67 0.0 0.33 1])
showMatchedFeatures(img_left_gray, img_right_gray, left_matched_points,right_matched_points);
title("特征点匹配结果")

%% Step6: 预测几何变化,去除不满足变化的野值(三种几何变换变化的方法:% 'similarity'(相似) | 'affine'(仿射) | 'projective'(投影))
[tform, left_matched_points_estimate, right_matched_points_estimate] = estimateGeometricTransform(left_matched_points, right_matched_points, 'projective'); 
% 显示结果
figure('Name','Step6: 预测几何变化,去除不满足变化的野值')
subplot('Position',[0.0 0.0 0.66 1])
showMatchedFeatures(img_left_gray, img_right_gray, left_matched_points_estimate,right_matched_points_estimate, 'montage');
title("去除不满足几何变化的特征点的匹配结果")
subplot('Position',[0.67 0.0 0.33 1])
showMatchedFeatures(img_left_gray, img_right_gray, left_matched_points_estimate,right_matched_points_estimate);
title("去除不满足几何变化的特征点的匹配结果")


三、部分结果展示

3.1 使用Sobel算子且方向为vertical,进行边缘检测

在这里插入图片描述

3.2 特征点提取(部分)

在这里插入图片描述

3.3 特征点匹配

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORB特征提取和匹配 的相关文章

  • Linux用户及权限管理(三)权限管理

    更新时间2020 05 13 在使用windows的时候关于权限管理的操作不多 xff0c 大家遇到比较多的应该是 xff1a 使用管理员身份才能正常运行某个程序 xff0c 或者删除某个文件 xff1b hosts文件无法修改 xff0c
  • C# 快速入门笔记

    最后更新时间2020 04 10 C 快速入门精简笔记 Chapter 0 前言Chapter 1 基础1 1 简介1 2 环境1 3 程序结构1 4 基本语法1 5 数据类型1 5 1 value types1 5 2 Reference
  • MATLAB的一点小tips

    更新时间2020 04 15 目录 1 matlab运算符2 matlab特殊变量和常量3 matlab保存工作区4 who 和whos5 长任务6 format 1 matlab运算符 运算符目的 43 加 xff1b 加法运算符 减 x
  • MATLAB矩阵和数组相关函数解析

    更新时间2020 04 15 未完结 目录 1 总表2 简单示例2 1 zeros2 2 ones2 3 rand2 4 true and false2 5 eye 1 总表 点击表中函数名可以跳转至官方网站查看精确英文解析 xff0c 也
  • HTTPS、SSL、TLS三者之间的联系和区别

    SSL Secure Socket Layer 安全套接层 是基于HTTPS下的一个协议加密层 xff0c 最初是由网景公司 xff08 Netscape xff09 研发 xff0c 后被IETF xff08 The Internet E
  • Word论文公式的两个格式问题

    更新时间2020 04 16 1 公式居中 xff0c 编号右对齐 solution xff1a 编写一个样式 xff0c 一劳永逸 你要居中 xff0c 你要右对齐 xff0c 先要有个参考 即你居中的 中 是哪里 xff0c 右对齐的
  • HTML- markdown版 江城子·乙卯正月二十日夜记梦

    江城子 乙卯正月二十日夜记梦 宋 苏轼 十年生死两茫茫 xff0c 不思量 xff0c 自难忘 千里孤坟 xff0c 无处话凄凉 纵使相逢应不识 xff0c 尘满面 xff0c 鬓如霜 夜来幽梦忽还乡 xff0c 小轩窗 xff0c 正梳妆
  • Keil μvision已停止工作?

    今天以及几周前我都遇到了这个问题 xff0c 提示消息都是一样的 xff0c Keil vision已停止工作 xff0c 接着keil就自己关闭了 我两次的原因不一样 1 第一次 用的是F407的板子 xff0c 排查了半天错误 xff0
  • 负数取余,取余和取模

    1 圆整 就是把一个小数或者说浮点数按某种规律近似为一个它左边或右边最近的一个整数 比如 xff1a 向负无穷圆整 span class token number 1 8 span span class token operator gt
  • [joint_state_publisher-3] process has died

    我是ROS melodic xff0c 其他版本应该一样的解决方法 去掉urdf xacro launch文件中的中文注释 xff0c 或者改为英文 xff0c 而且第一行不能有中文
  • Ubuntu 18.04安装N卡驱动

    1 原来 xff0c 是英特尔的集显 2 添加N卡驱动 检查是否有GPU显卡 xff0c 我电脑一张集显 xff0c 一张独显 xff0c 很清楚 如果不清楚的可以用 lspci grep i nvidia查看 xff1a linux202
  • ROS Melodic Arbotix报错

    ImportError dynamic module does not define module export function PyInit tf2 xff09 这是我做的内容 xff1a 1 创建一个四轮小车URDF模型 xff0c
  • Matlab画线性规划可行域

    线性规划什么的应该是运筹学的内容 xff0c 虽然数学建模比赛不会考这个 xff0c 但大家日常学习还是会遇到相关的问题 除了用单纯型法 xff0c 也可以用传统的画图法 xff0c 画出可行域 xff0c 再寻求可行解 可行域一般手画更快
  • 浅谈论文目录制作

    先来看咱们CSDN的目录 Markdown语句 xff1a 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 效果如下 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 我们论文中的目录道理也是一样 xff0c 无非就是
  • Linux文件系统(一)文件系统基本概念

    文件系统基本概念 1 文件系统概述2 文件系统的类型 xff08 1 xff09 ext系列 xff08 2 xff09 Reiserfs 3 Ubuntu文件系统的结构 xff08 1 xff09 概述 xff08 2 xff09 路径
  • 47、基于51单片机万年历温度闹钟农历阳历LCD 12864显示系统设计

    摘要 本文介绍了基于STC89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法 本设计由数据显示模块 温度采集模块 时间处理模块和调整设置模块四个模块组成 系统以STC89C52单片机为控制器 xff0c 以串行时钟日历芯片DS13
  • Linux文件系统(二)交换分区

    1 交换分区的概念 2 交换分区的管理
  • Linux文件系统(三)文档压缩及解压缩

    1 文档压缩概述 2 图形化归档工具 3 命令行工具
  • Linux文件系统(四)文件系统管理命令

    1 文件系统的基本操作 2 目录的基本操作 3 查看文件内容 4 文件类型 5 查询文件 6 其他管理命令
  • EndNote文献管理(一)雾里看花

    简介

随机推荐

  • EndNote文献管理(二)基操勿六

    1 创建文献数据库并添加文献1 1创建文献数据库1 2在线检索1 3批量导入1 4导入知网文献 2 文献管理2 1文献标记与排序2 2文献速览与下载全文2 3文献阅读与批注 3 编辑参考文献格式 1 创建文献数据库并添加文献 1 1创建文献
  • SQL Server(2019) 实验一 数据库和表的建立

    数据库和表的建立 一 实验目的二 实验内容和要求2 1 数据库的创建 2 2 表的创建 查看 修改和删除 2 2 1 xff0e 表的创建 2 2 2 xff0e 向创建的表中添加数据记录 2 2 3 xff0e 修改表结构 xff08 找
  • SQL Server 中时间的几种表示

    在SQL Server中 xff0c 点开数据类型 xff0c 单单是时间这一类变量都有着多重数据类型 datetimetimestampdatetimedatetime2datetimeoffset 他们的显示效果如下 xff1a spa
  • SQL Server(2019) 实验二 单表查询

    单表查询 一 实验目的二 实验内容和要求2 1 表结构修改2 1 1 xff0e 在实验三的所建立的数据库中增加Teacher表 xff0c 结构如下 xff1a 2 1 2 xff0e 在实验三的所建立的数据库中增加Teaching表 x
  • SQL Server(2019)导入excel数据

    要导入的excel文件如图所示 xff0c 600个记录 操作步骤 xff1a 1 在要导入的数据库上右键 xff0c 任务 xff0c 导入数据 2 选择数据源为excel xff0c 选择相应excel文件 xff0c 选择excel版
  • SQL Server(2019)导出excel数据

    目标 xff1a 将Grademanager数据库中的test表导出为excel test表内容 xff1a 如图 xff0c 600条记录 操作步骤 xff1a 1 在相应数据库上右键 xff0c 任务 xff0c 导出数据 2 选择数据
  • 机器视觉特征提取介绍:HOG、SIFT、SURF、ORB、LBP、HAAR

    一 概述 这里主要记录自己的一些感悟 xff0c 不是很系统 想要详细系统的理论 xff0c 请参考文末的 图像处理之特征提取 个人不是专业cv工程师 xff0c 很多细节没有深究 xff0c 描述可能不严谨 在总结物体检测算法之前先把基础
  • ROS低调复习总结

    ROS复习 一 考试时间 形式 日期二 题型三 不知道随便写四 课程知识点 难点1 1 3章课后复习题1 1 单元测试一1 2 单元测试二1 3 单元测试三 2 第二章 ROS系统架构2 1 比较Topic与Service通信2 2 关闭一
  • 了解Web前端-1 Http基本原理

    HTTP基本原理 1 HTTP协议2 HTTP与Web服务器3 浏览器中的请求和响应1xx 信息2xx 成功3xx 重定向4xx 客户端错误5xx 服务器错误 1 HTTP协议 Hyper Text Transfer Protocol xf
  • 了解Web前端2-HTML语言

    HTML语言 1 什么是HTML2 了解HTML结构4 HTML的基本标签4 1 不是标签4 2 文件开始标签 96 96 4 3文件头部标签 96 96 4 4文件标题标签 96 96 4 5元信息标签 96 96 4 6页面的主体标签
  • 了解Web前端3-CSS层叠样式表

    CSS样式层叠表 1 CSS 概述2 属性选择器2 1属性选择器2 2属性和值选择器2 3属性和值的选择器 多值 3 类和ID选择器3 1ID选择器3 2类选择器3 3为特定元素使用class 1 CSS 概述 CSS是一种标记语言 xff
  • 了解Web前端4-JavaScript动态脚本语言

    JavaScript 动态脚本语言 1 页面中直接嵌入JavaScript代码2 连接外部JavaScript文件 JavaScript 是 web 开发人员必须学习的 3 门语言中的一门 xff1a HTML 定义了网页的内容CSS 描述
  • 爬虫の简介

    爬虫简介 一 什么是爬虫二 Python爬虫架构 一 什么是爬虫 爬虫 xff1a 一段自动抓取互联网信息的程序 xff0c 从互联网上抓取对于我们有价值的信息 二 Python爬虫架构 Python 爬虫架构主要由五个部分组成 xff0c
  • 一个不错的在线作图网站

    菜鸟教程的一个在线工具 连接 xff1a https c runoob com more shapefly diagram 优点 xff1a 没有广告 xff0c 不用关注微信公众号 xff0c 不用登陆 此外 xff0c 菜鸟还提供了其他
  • ABB机器人复习

    1 工业机器人最显著的特点 xff1a 2 工业气人的5种典型的结构 xff1a 3 认识示教器 xff1a 4 ABB机器人坐标系 xff1a 5 轴运动与线性运动 xff1a 1 轴运动 xff1a 2 线性运动 xff1a 6 重定位
  • step7basic的许可无法彻底完成

    安装博途并 后 xff0c 在项目中选择设备时可能会出现 xff1a step7basic的许可无法彻底完成 因为automation license manager中 的报错 原因 xff1a win10系统的更新 xff0c 导致软件不
  • 西门子学习第一章 S7-1200基础

    第一章 1 1 S7 1200系统概述 xff08 1 xff09 PLC 运用领域 xff08 2 xff09 S7 1200外观 xff08 3 xff09 西门子系列分类 1 2博途软件1 3 S7 1200系列PLC的硬件介绍 xf
  • 可见光的波长转换为RGB值颜色,光谱波长与RGBA分量,不同波长的光转换成不同的RGB值,JavaScript版本

    JS版本的光谱波长转换RGBA颜色值的方法 xff0c 在网上没找到 xff0c 后来领导发来一个C 43 43 版本的 xff0c 我对照着改为JS版 xff0c 有需要的朋友 可以参考 xff0c 代码如下 xff1a lt html
  • Modbus TCP Server端(附超全注释)

    实验项目名称 Modbus TCP实验 一 实验目的二 实验内容三 实验环境四 设计方案五 实验结果及分析 xff08 或设计总结 xff09 六 完整代码6 1 server c6 2 respond c6 3 respond h 开发语
  • ORB特征提取和匹配

    一 步骤二 代码三 部分结果展示3 1 使用Sobel算子且方向为vertical xff0c 进行边缘检测3 2 特征点提取 xff08 部分 xff09 3 3 特征点匹配 一 步骤 Step1 xff1a 读取彩色图片 1 新建实验用