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,为输出图像;
效果如下图

参考链接
"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的视觉工作流",欢迎前往阅读。
上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!