OpenCV 4.4.0 knnMatch не работает, если два изображения имеют одинаковое количество ключевых точек (ошибка?)
Я попытался протестировать различные методы сопоставления ключевых точек OpenCV, чтобы найти сдвиг и поворот изображения между двумя не совсем одинаковыми изображениями (срезами набора 3D-данных). Я обнаружил эту проблему: когда два изображения имеют одинаковое количество ключевых точек, функция match2points_nndr, скопированная с https://github.com/thorikawa/akaze-opencv/blob/master/akaze/akaze_utils.cpp, не уменьшает количество совпадений и
estimateAffinePartial2D
возвращает очень небольшое количество вставок и иногда дает сбой. Эта проблема возникает постоянно с детектором ORB с ограниченным количеством ключевых точек и случайным образом с другими детекторами / дескрипторами.
Я тоже пробовал использовать
match
вместо
knnMatch
с какой-то сортировкой для ORB безуспешно.
Я делаю что-то неправильно? Я не могу поверить, что метод ORB обычно не работает, и никто не сообщил об ошибке в OpenCV. AKAZE не может использовать части своего тестового кода.
Мой код, включая тестовые изображения, находится здесь: https://github.com/pavel-perina/cv-bug
Результат выглядит так:
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 ничего не изменилось.