C# 基于OpenCv的视觉工作流-章38-BF特征匹配

C# 基于OpenCv的视觉工作流-章38-BF特征匹配

本章目标:
一、 暴力特征匹配原理;
二、 创建匹配器;
三、 特征匹配;
四、 匹配点筛选;
五、绘制匹配点;

特征匹配首先获取两幅图像的特征点与描述子,然后再对描述子进行匹配;特征匹配有多种,本章介绍暴力特征匹配。

一、暴力特征匹配原理

关于特征点与描述子的获取,章24-SURF特征点已介绍,不再详述。详细原理,见文末链接


二、 创建匹配器

OpenCv 暴力特征匹配可如下创建

BFMatcher matcher = new BFMatcher(NormTypes.L1, true);

其中:参数1,为计算距离方式;

参数2,为是否进行交叉匹配;

三、 特征匹配;

OpenCv 暴力特征匹配可如下使用

DMatch[] matches = matcher.Match(descriptors1, descriptors2);

其中:参数1,为查找图(模板小图)的描述子;

参数2,为待匹配图(大图)的描述子;

注:匹配返回的结果中,有匹配的距离,根据距离可筛选符合要求的特征点

四、 匹配点筛选

通过C#相应语法查找即可

DMatch[] goodMatches = matches.Where((m, i) => m.Distance < distance).ToArray();

其中:参数distance,为指定距离值;

说明:匹配得到的距离,值越小越相似,所以取小于指定距离值的点,作为最终的匹配点。

五、绘制匹配点

OpenCv 绘制匹配点可如下使用

Mat imgMatches = new Mat();

Cv2.DrawMatches(image1, keyPoints1, Image2, keyPoints2, goodMatches, imgMatches);

其中:参数1,为输入图像1;

参数2,为输入图像1特征点;

参数3,为输入图像2;

参数4,为输入图像2特征点;

参数5,为匹配特征点;

参数6,为输出图像;

效果如下图

参考链接

https://www.bilibili.com/video/BV1RFtpeJE6h?spm_id_from=333.788.videopod.episodes\&vd_source=3f9438f03abb9d3e91fda0640164d626\&p=76

"VisionTool 探迹"免费视觉工具

下载地址:https://pan.baidu.com/s/11tktKOSnepLNIEqNbvnv6w?pwd=qv5i

版本已更新为V1.0.0.2,更新内容如下:

1.增加点查找;

2.增加交点查找;

3.增加轮廓点距,实现两轮廓各点间距测量;

4.增加点-点间距,实现独立点与独立点的距离测量;

5.增加点-线间距,实现独立点与独立线的距离测量;

6.增加线-线间距,实现独立线与独立线的距离测量;

7.增加线-线角度,实现独立线与独立线的角度测量;

8.增加轮廓段距,实现两轮廓的分段间距测量;

9.缺陷检测模块中,修复ROI显示功能;

"VisionTool Halcon"付费视觉工具

下载地址:https://pan.baidu.com/s/1v832KTonDYS6oNnWG2iZtQ?

对应系列文章"C# 基于Halcon的视觉工作流",欢迎前往阅读。

上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!

相关推荐
道一云黑板报1 小时前
技术拆解:AI低代码架构设计与全链路落地实现
人工智能·驱动开发·低代码·ai·企业微信·ai编程·代码规范
历程里程碑1 小时前
链表-----
数据结构·线性代数·算法·链表·矩阵·lua·perl
段小二1 小时前
Prompt 工程与结构化输出:让 LLM 返回可用的 Java 对象(Java 架构师的 AI 工程笔记 04)
人工智能
一叶落4382 小时前
167. 两数之和 II - 输入有序数组【C语言题解】
c语言·数据结构·算法·leetcode
火山引擎开发者社区2 小时前
基于多模态数据湖的新一代人工智能应用——Nvidia 工具链落地实践的深度洞察
人工智能
地平线开发者2 小时前
征程6 MCU safetylib sample
算法·自动驾驶
Elastic 中国社区官方博客2 小时前
用于 Elasticsearch 的 Gemini CLI 扩展,包含工具和技能
大数据·开发语言·人工智能·elasticsearch·搜索引擎·全文检索
段小二2 小时前
ChatClient 源码解析:从 HTTP 请求到 AI 响应的全链路拆解(Java 架构师的 AI 工程笔记 02)
人工智能
RuiBo_Qiu2 小时前
【LLM进阶-后训练&部署】2. 常见的全参数微调SFT方法
人工智能·深度学习·机器学习·ai-native