OpenCVSharp如何实现的最佳匹配矩形检测?

摘要:前言 今天来学习一下OpenCVSharp中最佳匹配矩形检测的例子。其过程可以分为ORB特征检测、特征匹配、最佳匹配筛选、单应性计算与矩形绘制。 效果: 实践 ORB特征检测 进行ORB特征检测: using var img1 = new
前言 今天来学习一下OpenCVSharp中最佳匹配矩形检测的例子。其过程可以分为ORB特征检测、特征匹配、最佳匹配筛选、单应性计算与矩形绘制。 效果: 实践 ORB特征检测 进行ORB特征检测: using var img1 = new Mat(FirstImagePath, ImreadModes.Color); using var img2 = new Mat(SecondImagePath, ImreadModes.Color); using var orb = ORB.Create(1000); using var descriptors1 = new Mat(); using var descriptors2 = new Mat(); orb.DetectAndCompute(img1, null, out var keyPoints1, descriptors1); orb.DetectAndCompute(img2, null, out var keyPoints2, descriptors2); ORB(Oriented FAST and Rotated BRIEF)是一种快速高效的特征检测算法,它结合了FAST关键点检测器和BRIEF描述符,并添加了旋转不变性和尺度不变性,能够在保持较高匹配精度的同时提供极快的计算速度,特别适合实时应用和移动设备上的计算机视觉任务。 查看ORB.Create方法: public static ORB Create(int nFeatures = 500, float scaleFactor = 1.2f, int nLevels = 8, int edgeThreshold = 31, int firstLevel = 0, int wtaK = 2, ORBScoreType scoreType = ORBScoreType.Harris, int patchSize = 31, int fastThreshold = 20) { NativeMethods.HandleException(NativeMethods.features2d_ORB_create(nFeatures, scaleFactor, nLevels, edgeThreshold, firstLevel, wtaK, (int)scoreType, patchSize, fastThreshold, out var returnValue)); return new ORB(returnValue); } ORB.Create() 方法是OpenCV中用于创建ORB特征检测器的静态工厂方法,它提供了多个参数来定制ORB检测器的行为: 参数名 默认值 含义说明 nFeatures 500 要保留的最大特征点数量 scaleFactor 1.2f 金字塔缩放比率,大于1。scaleFactor=2表示经典金字塔,每下一层比上一层少4倍像素 nLevels 8 金字塔层数。最小层尺寸等于输入图像尺寸/pow(scaleFactor, nlevels-firstLevel) edgeThreshold 31 不检测特征的边界区域大小,应大致匹配patchSize参数 firstLevel 0 放置源图像的金字塔层级,之前的层级用上采样的源图像填充 wtaK 2 生成定向BRIEF描述符每个元素所需的点数。默认值2表示取随机点对比较亮度,输出0/1响应 scoreType Harris 特征点评分类型。
阅读全文