我有一个问题。假设我从相机中捕获了一个图像。之后,我旋转我的相机到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|