C++ 当两个图像具有相同数量的关键点时,OpenCV 4.4.0 knnMatch似乎不起作用(bug?)

C++ 当两个图像具有相同数量的关键点时,OpenCV 4.4.0 knnMatch似乎不起作用(bug?),c++,opencv,orb,opencv-features2d,C++,Opencv,Orb,Opencv Features2d,我尝试测试各种OpenCV关键点匹配方法,以找到两个不完全相同的图像(3D数据集的切片)之间的图像偏移和旋转。我发现了这个问题:当两个图像具有相同数量的关键点时,从中复制的matches2points\u nndr函数不会减少匹配的数量,estimateAffinePartial2D返回的内联数非常少,有时会失败。这个问题总是发生在关键点数量有限的ORB检测器上,并且随机发生在其他检测器/描述符上 我还尝试使用match而不是knnMatch对ORB进行排序,但没有成功 我做错什么了吗?我不敢相

我尝试测试各种OpenCV关键点匹配方法,以找到两个不完全相同的图像(3D数据集的切片)之间的图像偏移和旋转。我发现了这个问题:当两个图像具有相同数量的关键点时,从中复制的matches2points\u nndr函数不会减少匹配的数量,
estimateAffinePartial2D
返回的内联数非常少,有时会失败。这个问题总是发生在关键点数量有限的ORB检测器上,并且随机发生在其他检测器/描述符上

我还尝试使用
match
而不是
knnMatch
对ORB进行排序,但没有成功

我做错什么了吗?我不敢相信ORB方法通常会失败,而且没有人向OpenCV报告错误。AKAZE使用部分测试代码失败

我的代码(包括测试图像)如下所示:

输出如下所示:

ALGORITHM="ORB2500"
Image=25; keypoints=2500vs2500; matches=2500; inliers=41 (1.64%)
Image=26; keypoints=2500vs2500; matches=2500; inliers=28 (1.12%)
Image=27; keypoints=2500vs2500; matches=2500; inliers=38 (1.52%)
ALGORITHM="AKAZE"
Image=25; keypoints=1670vs1673; matches=1224; inliers=1217 (99.4281%)
Image=26; keypoints=1673vs1673; matches=1673; inliers=69 (4.12433%)
Image=27; keypoints=1673vs1688; matches=1189; inliers=1176 (98.9066%)
PS:在历史悠久的OpenCV 3.3.0中没有什么不同