透视变换是如何工作的? [OpenCV 蟒蛇]

Posted

技术标签:

【中文标题】透视变换是如何工作的? [OpenCV 蟒蛇]【英文标题】:How does perspective transformation work? [OpenCV python] 【发布时间】:2021-07-13 15:36:48 【问题描述】:

我的论文的一部分涉及纠正图像中没有完美正面透视的部分。由于我的分数低,我无法添加图像,但本质上是这个python code (with images)。

我已经构建了程序并且它可以工作,但我不明白它背后的数学原理。我研究了矩阵图像校正和单应性,但存在巨大的技能差距,以至于我无法理解。我不确定从哪里开始学习数学。我知道矩阵的基础知识,仅此而已。我想自己编写矩阵变换函数。

简而言之,我需要“学习”什么才能理解数学?

谢谢。

【问题讨论】:

【参考方案1】:

透视变换只是从矩阵形式求解的分数线性方程。

分数线性方程的形式是分子线性,分母线性,即分子和分母都最高的一阶项。

x = (P1*u + P2*v + P3) / (P7*u + P8*v + 1)
y = (P4*u + P5*v + P6) / (P7*u + P8*v + 1)

其中 x,y 是输入坐标,u,v 是输出坐标。 (逆也是分数线性的,所以形式相同)

在矩阵形式中,这是:

(x)  =  ( P1  P2  P3 )  (u)
(y)     ( P4  P5  P6 )  (v)
(1)     ( P7  P8   1 )  (1)

七个未知的 P 可以通过 4 对(或更多)对共轭输入和输出坐标的联立方程求解。

【讨论】:

【参考方案2】:

我敢肯定这是不可能的,但你可以试试。 事实上,射影几何是大学数学专业研究的一个深刻的数学概念。如果你真的想很好地理解它,你必须成为一个数学家。 在线性代数、解析几何和仿射几何之后,依次研究射影几何。 但我怀疑你需要这一切。 你可以考虑一个专注于图像处理的简化方法,比如here和here

【讨论】:

以上是关于透视变换是如何工作的? [OpenCV 蟒蛇]的主要内容,如果未能解决你的问题,请参考以下文章

初学opencv c++学习笔记透视变换--warpPerspective()

如何使用 OpenGL 模拟 OpenCV 的 warpPerspective 功能(透视变换)

使用OpenCV透视变换技术实现坐标变换实践

使用OpenCV透视变换技术实现坐标变换实践

使用OpenCV透视变换技术实现坐标变换实践

3h精通OpenCV-透视变换