蛮力( Brute-Force)匹配
Brute-Force匹配非常简单,首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点.
对于BF匹配器,首先我们必须使用cv2.BFMatcher()
创建 BFMatcher 对象。它需要两个可选的参数.
- 第一个是
normType
,它指定要使用的距离测量,默认情况下,它是cv2.NORM_L2
.它适用于SIFT,SURF等(cv2.NORM_L1
也在那里).对于基于二进制字符串的描述符,如ORB,BRIEF,BRISK等,应使用cv2.NORM_HAMMING
,使用汉明距离作为度量,如果ORB使用WTA_K == 3or4
,则应使用cv2.NORM_HAMMING2
. crossCheck
:默认值为False
。如果设置为True
,匹配条件就会更加严格,只有到A中的第i个特征点与B中的第j个特征点距离最近,并且B中的第j个特征点到A中的第i个特征点也是最近时才会返回最佳匹配,即这两个特征点要互相匹配才行.
两个重要的方法是BFMatcher.match()
和BFMatcher.knnMatch()
, 第一个返回最佳匹配, 第二种方法返回k个最佳匹配,其中k由用户指定.
使用cv2.drawMatches()
来绘制匹配的点,它会将两幅图像先水平排列,然后在最佳匹配的点之间绘制直线。如果前面使用的BFMatcher.knnMatch()
,现在可以使用函数cv2.drawMatchsKnn
为每个关键点和它的个最佳匹配点绘制匹配线。如果要选择性绘制就要给函数传入一个掩模.
i