matlab - 使用 Ransac 的仿射模型

标签 matlab opencv machine-learning computer-vision affinetransform

RANSAC 用于查找与两个图像相关的单应性矩阵。为了计算矩阵,我们需要至少 4 个对应关系。同形矩阵是描述任何透视变换的通用 3*3 矩阵。如果我们只给出3个对应关系,那么如何计算同源矩阵?由于两幅图像是仿射相关的,因此我们可以仅使用3个对应关系来计算矩阵。

最佳答案

寻找有关该主题的文献的第一个地方可能是 Hartley 和 Zisserman 所著的计算机视觉中的多 View 几何一书。

从 3 个对应关系中,您可以找到大小为 3x3 的仿射单应性 A,它将每个 2D 图像点 p 映射到每个点 q以下方程(假设 pq 是齐次形式的 2D 点):

A*p = q

要找到匹配三组点对的A:{p1, p2, p3} -> { q1, q2, q3 },您只需堆叠两个矩阵 PQ 中的点,大小均为 3x3。

矩阵'P'使得单元格P(1,i)P(2,i)应包含第一个和第 i 个点 p 的第二个坐标。矩阵 Q 使得单元格 Q(1,i)Q(2,i) 应包含 Q(1,i) 的第一个和第二个坐标em>i-第 q 点。

单元格 P(3,i)Q(3,i),对于 i=1..3 将包含 1 (为齐次坐标)。

一旦形成这些矩阵,您可以通过求解找到A:

A*P = Q

即,简单地说:

A = Q*P.inv()

但请注意,您正在寻找的是投影平面单应性,并且您至少需要 4 个点来计算它,并且需要不同的方法。您必须解方程:

H * p α q

其中 H 是您要查找的单应性,α 表示比例。要从四个对应关系中查找 H,您必须使用 Direct Linear Transformation方法。不过,在 OpenCV 中您可以使用 findHomography找到H

希望对您有所帮助,问候。

关于matlab - 使用 Ransac 的仿射模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23461590/

相关文章:

python - 使用 scikit-learn DecisionTreeClassifier 进行聚类

matlab - 在 Matlab 中拟合二维数据

matlab - bar3 颜色取决于 zdata

matlab - 用于在 JVM 上进行富有表现力的、功能丰富的数值计算的工具

python - GCC 不使用安装到虚拟环境的库进行编译

opencv - 来自终端的示例程序无法运行

matlab - 一组数据中的最大数量

c++ - 为什么 findHomography 返回错误结果?

machine-learning - 我应该应用哪些人工神经网络概念?

scala - Spark MLlib 矩阵乘法