Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 可以改进RANSAC以消除异常值吗?_Opencv_Image Processing_Computer Vision_Feature Detection_Ransac - Fatal编程技术网

Opencv 可以改进RANSAC以消除异常值吗?

Opencv 可以改进RANSAC以消除异常值吗?,opencv,image-processing,computer-vision,feature-detection,ransac,Opencv,Image Processing,Computer Vision,Feature Detection,Ransac,我正在使用SIFT特征检测器和描述符。我正在匹配两幅图像之间的点。我正在使用带有RANSAC方法的OpenCV的findHomography()函数 当我读到RANSAC算法时,据说调整RANSAC的阈值参数可以改善结果。但我不想硬编码任何参数 我知道RANSAC正在删除匹配中的异常值。有人能告诉我在应用单应性之前用基本方法去除异常值(不是全部)是否能改善单应性的结果吗 如果是这样,我们如何在RANSAC之前应用一个操作来删除异常值?不,RANSAC和相关算法的全部要点是删除异常值 然而,可以通

我正在使用SIFT特征检测器和描述符。我正在匹配两幅图像之间的点。我正在使用带有RANSAC方法的OpenCV的
findHomography()
函数

当我读到RANSAC算法时,据说调整RANSAC的阈值参数可以改善结果。但我不想硬编码任何参数

我知道RANSAC正在删除匹配中的异常值。有人能告诉我在应用单应性之前用基本方法去除异常值(不是全部)是否能改善单应性的结果吗


如果是这样,我们如何在RANSAC之前应用一个操作来删除异常值?

不,RANSAC和相关算法的全部要点是删除异常值

然而,可以通过避免定义某种程度上任意的阈值的方式来改进算法


一个好的起点是托尔的老一套

你对好结果的定义是什么?RANSAC是关于点数和精度之间的折衷,因此没有统一的好定义:如果精度较差,则有更多的内联线,反之亦然

您正在讨论的参数可能是一个异常值阈值,它可能只是调整得不好,所以您有太多的近似内联线或太少的超精确内联线。现在,如果你预先过滤你的异常值,你只会加快你的RANSAC,但不太可能改善解决方案。最终,单应RANSAC的速度归结为选择4个内联线的概率,当它们的比例较高时,收敛速度更快


在应用RANSAC之前,对异常值进行排序的其他方法是查看更简单的约束,例如点的排序、直线仍然是直线以及单应变换的其他不变量。最后,您可能希望使用更高级别的特征(如直线)来计算单应性。注意,在齐次坐标中,当点变换为p2=H*p1时,直线变换为l2=H-t*l1。这实际上可以提高精度(因为直线是宏观特征,比兴趣点噪音小),而直线可以通过Hough变换检测

RANSAC方法通过丢弃异常值来估计所需的单应性。该方法基于这样一个假设,即您的大多数样本都符合基本的单应性。数据中的噪声被消除,如果模型不是100%精确的,参数就在那里给你灵活性。因此,如果模型不准确(例如,因为存在严重失真),预过滤将不会有帮助,只会调整阈值。我必须提醒您,如果使用
findHomography()
,你假设世界坐标系中的所有3D点都在一个平面上。我忘了提到一件事——RANSAC作为一种迭代方法,必须多次找到单应性,因此运行一种廉价的算法(例如DLT)。要找到真正的单应性,必须将RANSAC的输出作为非线性算法(如LM)的初始化点。廉价算法和非线性算法的区别在于优化指标。非线性方法优化了正确的度量(平方点距离之和),但为此付出了代价(速度很慢)。一个便宜的算法速度很快,但是优化了错误的度量(参数错误)。谢谢你的更新。你们能不能把它添加到被接受的答案中,以供将来的读者参考,因为它也有一个很好的答案。