使用OpenCV检测SURF或SIFT算法中的异常值

问题描述 投票:4回答:2

哪种方法最好比较两个图像并丢弃离群点?在find_obj.cpp opencv示例中,它们使用FLANN,但不要丢弃异常值。

[我见过一些使用Kmeans或图形的方法。

image opencv sift surf feature-detection
2个回答
2
投票

有一种相当可靠和有效的方法来拒绝嘈杂的点并确定您感兴趣的点之间的转换。通常用于拒绝离群值的算法称为RANSAC(http://en.wikipedia.org/wiki/RANSAC),用于确定转换的算法可以采用几种形式,但是最新的技术水平被称为五点算法,可以找到here -可以找到MATLAB实现here。请注意,即使您不关心两个图像之间的确切旋转,也需要确定转换-这是识别异常值的方法。

[不幸的是,我不知道这两种方法的成熟实现;您可能需要做一些自己的工作来实现RANSAC并将其与五点算法集成。

OpenCV的实现对于您的任务来说是过高的(这意味着它可以工作,但是会花费比必要时间更多的时间),但是可以立即使用。感兴趣的功能称为cv :: findFundamentalMat(http://opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html#cv-findfundamentalmat)


0
投票

我实际上是在尝试做同样的事情,经过一番搜索,我发现这是最合适的。听说过单应矩阵吗?检查来自OpenCV的下面的链接,它向您展示了如何检测特征,匹配特征并仅使用Inliers获得遮罩-它使用RANSAC算法拒绝了离群值,RANSAC算法是OpenCV中findHomography函数的标志。

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html#

© www.soinside.com 2019 - 2024. All rights reserved.