最近一直在研究针孔相机模型,但是被OpenCV提供的模型和《计算机视觉中的Multiple View geometry》教科书弄糊涂了。
我知道下面的照片是一个简化的模型,它切换了图像平面和相机框架的位置。为了更好地说明和理解,并考虑到主点 (u0,v0),两帧之间的关系为x=f(X/Z)+u0
和y=f(Y/Z)+v0
。
但是,我真的很困惑,因为通常图像坐标是以下第四象限坐标的形式!
我可以直接将以下定义中的 (x,y) 替换为上述“等效”针孔模型,这不是很有说服力吗?
此外,如果一个物体在相机坐标(当然是Z>f)的区域(+X,+Y)象限内,在等效模型中,它应该出现在图像坐标的右半平面上。但是,在普通相机拍摄的图像中,这样的物体应该位于左半边。因此,对我来说这个模型是不合理的。
最后,我尝试在原始模型的基础上推导如下。
结果是x1=-f(X/Z)
和y1=-f(Y/Z)
。
然后,我试图找到(x2,y2)坐标和相机坐标之间的关系。结果是x2=-f(X/Z)+u0
和y2=-f(Y/Z)+v0
。
在 (x3,y3) 坐标和相机坐标之间,结果是x3=-f(X/Z)+u0
和y3=f(Y/Z)+v0
。
无论我尝试过哪个坐标系,都不是一些 CV 教科书提供的x=f(X/Z)+u0
and的形式。y=f(Y/Z)+v0
另外,在(x2,y2)-坐标或(x3,y3)-坐标上的投影结果也不合理,原因相同:物体在相机坐标的(+X,+Y,+Z)区域应该“出现”在相机拍摄的图像的左半平面上。
谁能指出我误解了什么?