我正在使用 opencv 为 iPhone 开发一个应用程序。我必须使用方法solvePnPRansac:
http://opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html
对于这种方法,我需要提供一个相机矩阵:
__ __
| fx 0 cx |
| 0 年 |
|_0 0 1 _|
其中 cx 和 cy 代表图像的中心像素位置, fx 和 fy 代表焦距,但这就是所有文档所说的。我不确定为这些焦距提供什么。iPhone 5 的焦距为 4.1 毫米,但我认为这个值不能按原样使用。
我查了另一个网站:
http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
它显示了 opencv 如何创建相机矩阵。这里指出焦距是以像素为单位测量的。
我查了另一个网站:
http://www.velocityreviews.com/forums/t500283-focal-length-in-pixels.html
(大约一半)它说焦距可以使用以下公式从毫米单位转换为像素:fx = fy = focusMM * pixelDensity / 25.4;
我发现的另一个链接指出 fx = focusMM * width / (sensorSizeMM); fy = focusMM * 长度 / (sensorSizeMM);
我不确定这些方程以及如何正确创建这个矩阵。
任何有关如何创建准确的相机矩阵(尤其是 iPhone 5)的帮助、建议或链接将不胜感激,
艾萨克
ps 我认为 (fx/fy) 或 (fy/fx) 可能等于相机的纵横比,但这可能是完全错误的。
更新:
使用此链接,我可以弄清楚他们希望如何格式化 fx 和 fy,因为他们使用它来缩放相对于它们与中心的距离的角度。因此,fx 和 fy 可能以像素/(单位长度)为单位,但我仍然不确定这个单位长度需要是多少,只要 x 和 y 相互缩放,它可以是任意的吗?