我是一名机器人工程师,我不是计算机视觉或视觉伺服的专家。这是我对相机的最佳体验之一。
无论如何,我想获得与图像中某个像素相关的方位信息。
设置如下。我有一台分辨率为1040x776的相机,我进行了校准。我的图像中有一些物体,我能够检测到并与图像中的某个点相关联。像素用 u,v 表示(我猜)所以这些点在 u 轴(水平)上0到1040之间,在 0到776之间> v 轴。
假设u,v = 0,0位于图像的中心(即使它位于左上角。但这不是问题)。
我想要的是从相机中心到上述像素的单位矢量。因此,例如,如果像素位于图像的中心,则得到的矢量应为(1,0,0)。
我想我已经在stackexchange上找到了回复,但我不是100%肯定是我需要的: OpenCV: Calculate angle between camera and pixel
配方:
1 - 校准相机,获取相机矩阵K和失真参数D.在OpenCV中,这将按照本教程中的描述完成。
2 - 从感兴趣的像素位置消除非线性失真。在OpenCV中使用undistortPoints例程完成,而不传递参数R和P.
3 - 通过将相位坐标中的像素位置乘以相机矩阵的倒数,将相关像素反投影到相机3D坐标中的光线(相机中心尾部的单位矢量)。
你怎么看?提前感谢您的关注。
答案 0 :(得分:0)
假设摄影机位于原点并向下看正Z轴,则图像平面是XY平面,正X指向右,正Y指向下,3D像素的位置为:
(pixel.x - imageCentreX, pixel.y - imageCentreY, focalLength)
然后,您需要将其乘以相机的3x3旋转矩阵以获得3D方向矢量:
rotation * (pixel.x - imageCentreX, pixel.y - imageCentreY, focalLength)
然后可以通过除以长度来归一化此向量,以将单位方向向量取回一个像素。