Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/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
Opencv 寻找两帧之间的变换_Opencv_Video_Transformation - Fatal编程技术网

Opencv 寻找两帧之间的变换

Opencv 寻找两帧之间的变换,opencv,video,transformation,Opencv,Video,Transformation,我有两个连续的视频帧,我用快速算法检测关键点。我使用平方差和法(SSD)匹配关键点。 所以基本上我已经匹配了两帧之间的关键点。现在我想从匹配的关键点集计算两帧之间的仿射变换(缩放+旋转+平移)。 我知道如何从一对两点计算仿射变换。 我的问题是,我们如何计算出超过两个或三个点?我知道我必须使用最小中值平方法,但我对这个领域不熟悉,所以我不知道如何使用它。 有人能详细解释一下吗?或者提供一个有用的链接,用一种简单的方式来实现这一点。为此,您可以使用functionfindHomography 如果您

我有两个连续的视频帧,我用快速算法检测关键点。我使用平方差和法(SSD)匹配关键点。
所以基本上我已经匹配了两帧之间的关键点。现在我想从匹配的关键点集计算两帧之间的仿射变换(缩放+旋转+平移)。
我知道如何从一对两点计算仿射变换。
我的问题是,我们如何计算出超过两个或三个点?我知道我必须使用最小中值平方法,但我对这个领域不熟悉,所以我不知道如何使用它。

有人能详细解释一下吗?或者提供一个有用的链接,用一种简单的方式来实现这一点。

为此,您可以使用function
findHomography

如果您提供的所有点匹配都是良好匹配,则可以保留参数
方法的默认值(即值0)。然后将使用最小二乘法

但是,如果您从SSD keypoint matches获得点匹配,那么在真正的匹配中可能会有一些错误的匹配。因此,使用稳健的方法(如RANSAC或最小中值)将获得更好的结果


请注意,此
findHomography
函数返回透视变换(即完整的3x3矩阵)。如果您真的想要仿射变换(2x3矩阵),您必须自己实现最小二乘法(查看)或RANSAC(参见)。

有没有一种方法可以将RANSAC包括在SSD匹配中?可以,但RANSAC需要根据假定的匹配来估计模型。因此,您应该确定要估计的内容,即单应变换、基本矩阵等。这就是为什么在您的情况下,最自然的方法是使用RANSAC估计仿射变换。