2D点的映射到新视角

5

这是我的第一篇文章!

我正在尝试制作一个应用程序,可以确定网格(图像)中的某些点是明亮还是暗淡。原始网格定义良好(我知道所有点相对于角落的位置)。一旦我知道点应该在哪里,我就可以轻松地判断它是明亮还是暗淡。

问题是,我想从手持相机拍摄的网格图像中进行此操作。显然,由于手部移动,透视图将发生变化,我需要进行一些数学运算以确定新点相对于角落的位置(我知道如何检测角落)。

我已经阅读了其他帖子,其中唯一保留的属性是交叉比和关系。具体来说,这篇文章让我朝正确的方向前进,但作者没有完成数学计算。请注意,在此示例中,作者正在从倾斜的透视图转换为鸟瞰图,而我正在尝试做相反的事情。不过,数学应该是相同的。


从这个帖子 项目化变换开始

(显然,由于我是新手,无法发布图片,但是上面的帖子中有图片)

1) 找到点C',它是由线段AD和CP定义的直线的交点。

2) 找到点B',它是由线段AD和BP定义的直线的交点。

3) 确定B'DAC'的交叉比率,即r = (BA' * DC') / (DA * B'C')。

4) 构建投影线F'HEG'。这些点的交叉比率等于r,即r = (F'E * HG') / (HE * F'G')。

5) F'F和G'G将在投影点Q处相交,因此等式交叉比率并知道正方形边长,您可以通过一些算术技巧确定Q的位置。


我的问题是第四步,构造线段 F'HEG'。如果只知道两个点和所需的交叉比率,是否可能构造一条包含 4 个点的直线?我觉得这是一个有两个未知数的方程。如果有人能帮助我,我将非常感激!抱歉内容有点长。PS:我本来想在那个论坛上发帖,但这是我的第一篇帖子,所以我还没有权限。

如果您知道任意4个二维点的位置(其中没有3个位于同一条直线上),例如您的角落,您可以找到2D图像和网络摄像头帧之间的单应性变换H。 - Adi Shavit
2个回答

1

如果您知道任意4个2D点的位置(其中没有3个位于同一条直线上),例如您的角落,您可以找到2D图像和网络摄像头帧之间的单应性变换H。
H是一个3x3矩阵,可以将帧中的任何点转换为2D图像。 点p以齐次坐标形式写成:[x,y,1],使得p'=Hp。
给定图像和帧中的4个对应点,您可以解出H的9个元素。


0

由于F'、H、E和G在2D空间中位于同一条直线上,所以你的问题从一开始就非常受限。你需要解决的未知数有:

  1. 某个支撑点(你知道该直线经过的一个点),可以使用第一个点作为支撑点。
  2. 直线的方向(从支撑点出发往哪里走)。你可以使用第一个点到第二个点的方向。
  3. 沿着该直线的点的位置。你已经有两个点了(两个已知点),所以只需要再找到两个数字。

所需的交叉比例实际上是两个方程(一个用于x坐标,一个用于y坐标),因此你有两个方程和两个未知数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接