我有一个问题。让我说我从相机中捕获了一张图像。之后我将相机旋转到rX,rY,rZ(俯仰,偏航,滚动)并将其转换为(Tx,Ty,Tz)并捕获第二个image。现在第一张图像中的图像像素点(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.
任何解决这个问题的等式或逻辑?它可能更容易,但我找不到解决方案。请帮助我。
感谢。
答案 0 :(得分:2)
很遗憾,您没有足够的信息来解决问题。让我们看看我是否可以在这里绘制图纸来说明原因:
/
cam1 < (1) (2) (3)
\
\ /
v
cam2
我希望这很清楚。假设您从cam1
拍摄了三张照片,其中一些对象位于(1)
,(2)
和(3)
。在所有三种情况下,对象都位于图片的中心。
现在您将相机移动到cam2
位置,该位置涉及Y上的90度逆时针旋转以及X和Z上的一些平移。
为简单起见,假设您的Px,Py
是图片的中心。您使用cam1
拍摄的三张照片在该像素上具有相同的对象,因此无论您在cam2
图片中找到该像素的方程式和计算结果如何,它们都将具有相同的输入三张图片,所以他们也会产生相同的输出。但很明显,这将是错误的,因为从cam2
位置开始,您拍摄的三张照片中的每张照片都会看到物体处于非常不同的位置,水平移动穿过画面。
你看到缺少什么吗?
如果您想要正确执行此操作,则需要cam1
设备同时捕获depth map,这样对于每个像素,您还会知道相机距离相机有多远是。这将区分物体远离相机移动的三张图片。
如果你有Px,Py
的深度,那么你可以从cam1
进行逆透视投影,并获得该像素相对于cam1
的3D位置。然后,您将应用反向旋转和平移将点转换为相对于cam2
的3D空间,然后从cam2
执行perspective projection以查找新的像素位置。
对不起这个坏消息,我希望这有帮助!
答案 1 :(得分:1)
您可能希望阅读Epipolar Geometry。除了图像坐标之外,不知道任何其他内容,您的相应像素可以是第二个图像中沿线的任何位置。
答案 2 :(得分:0)
您可以搜索opengl transformation math
。链接应该为您提供3d中旋转和平移背后的数学。
例如,this link显示:
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|