我正在使用 opencv 为 iPhone 开发一个应用程序。我必须使用方法solvePnPRansac:
http://opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html 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 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 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)的帮助、建议或链接将不胜感激,
Isaac
附注我认为 (fx/fy) 或 (fy/fx) 可能等于相机的纵横比,但这可能是完全错误的。
UPDATE:
像素坐标到 3D 线 (opencv) https://stackoverflow.com/questions/3107771/pixel-coordinates-to-3d-line-opencv?rq=1
使用此链接,我可以弄清楚他们希望如何格式化 fx 和 fy,因为他们使用它来缩放相对于距中心距离的角度。因此,fx和fy可能以像素/(单位长度)为单位,但我仍然不确定这个单位长度需要是多少,只要x和y相互缩放,它可以是任意的吗?