三维相机对二维图像像素的变换效果



我有一个问题。假设我从相机中捕获了一个图像。之后,我旋转我的相机到rX,rY,rZ(俯仰,偏航,滚动),并将其转换为(Tx, Ty, Tz)和捕获第二张图像。现在,在第一张图像中的图像像素点(Px,Py)将在第二张图像中?

Px,Py ( any pixel point in image - given )
rX,rY,rZ , Tx , Ty , Tz (camera rotation and translation vectors - given)
have to find new value of that pixel point after camera rotation.


有什么公式或逻辑可以解决这个问题吗?这可能更容易,但我找不到解决办法。请帮帮我。
谢谢。

不幸的是,您没有足够的信息来解决这个问题。让我看看我能不能在这里画一个图来告诉你为什么:


      /
cam1 <    (1)   (2)   (3)
      

                 /
                 v
                cam2

我希望这是清楚的。假设你从cam1拍摄了三张照片,其中一些物体位于(1), (2)(3)。在这三种情况下,物体都恰好位于图片的中心。

现在将摄像机移动到cam2位置,这包括在Y上逆时针旋转90度加上在X和z上的一些平移

为简单起见,假设您的Px,Py是图片的中心。你用cam1拍摄的三张照片在那个像素处有相同的物体,所以无论你用什么方程和计算来定位cam2照片中的那个像素,它们对这三张照片的输入是相同的,所以它们也会产生相同的输出。但显然,这将是错误的,因为从cam2位置拍摄的三张照片中的每一张都将看到物体处于非常不同的位置,在框架中水平移动。

你看到少了什么吗?

如果你想正确地做到这一点,你需要你的cam1设备也捕获一个深度图,这样对于每个像素,你也知道它所代表的对象离相机有多远。这就是物体离相机较远的三张照片的区别。

如果你有Px,Py的深度,那么你可以从cam1做一个反向透视投影,并获得该像素相对于cam1的3D位置。然后,您将应用反向旋转和平移,将点转换为相对于cam2的3D空间,然后从cam2进行透视投影,以找到新的像素位置。

很抱歉这个坏消息,我希望这对你有帮助!

你可能想要阅读关于极几何。在不知道图像坐标以外的任何东西的情况下,对应的像素可以在第二张图像中的任何一条线上。

可以搜索"opengl transformation math"。这些链接应该为您提供3d旋转和平移背后的数学。

例如,这个链接显示:

 Rotations:
  Rotation about the X axis by an angle a:
  |1       0        0    0|
  |0  cos(a)  -sin(a)    0|
  |0  sin(a)   cos(a)    0|
  |0       0        0    1|

最新更新