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
特征点评分类型。
