【发布时间】:2015-03-17 14:42:42
【问题描述】:
我想从该点的给定像素坐标估计距离(相机到地面上的一点:这意味着 Yw=0)。为此,我使用了相机校准方法
但结果没有意义。
我有以下校准细节
-焦距 x 和 y,主点 x 和 y,有效像素大小(米),偏航角和俯仰角以及相机高度等。
-我已输入焦距、主点和平移向量以像素为单位进行计算
-我将图像点与 camera_matrix 相乘,然后进行旋转|平移矩阵(R|t),得到世界点。
我的程序正确吗?有什么问题?
结果
image_point(x,y) =400,380
world_point z 坐标(距离) = 12.53
image_point(x,y) =400,180
world_point z 坐标(距离) = 5.93
问题 z 坐标的像素很少, 这意味着 z 坐标是
这是我的matlab代码
%positive downward pitch
xR = 0.033;
yR = 0;
zR = pi;
%effective pixel size in meters = 10 ^-5 ; focal_length x & y = 0.012 m
% principal point x & y = 320 and 240
intrinsic_params =[1200,0,320;0,1200,240;0,0,1];
Rx=[1,0,0 ; 0,cos(xR),sin(xR); 0,-sin(xR),cos(xR)];
Ry=[cos(yR),0,-sin(yR) ; 0,1,0 ; sin(yR),0,cos(yR)];
Rz=[cos(zR),sin(zR),0 ; -sin(zR),cos(zR),0 ; 0,0,1];
R= Rx * Ry * Rz ;
% The camera is 1.17m above the ground
t=[0;117000;0];
extrinsic_params = horzcat(R,t);
% extrinsic_params is 3 *4 matrix
P = intrinsic_params * extrinsic_params; % P 3*4 matrix
% make it square ....
P_sq = [P; 0,0,0,1];
%image size is 640 x 480
%An arbitrary pixel 360,440 is entered as input
image_point = [400,380,0,1];
% world point will be in the form X Y Z 1
world_point = P_sq * image_point'
【问题讨论】:
-
欢迎来到 SO。尽管您已经描述了您的程序,但您的 Matlab 代码会更容易在答案中使用,因为误解的可能性较小。另外,您能否澄清一下“没有意义”——也许给出一个示例输入和预期输出?
-
你的程序看起来是正确的,所以你应该在某个地方犯了错误。 AsNeil 建议,将您的代码与解释部分一起发布,因为这样更容易调试。
-
我通过添加 matlab 代码编辑了我的帖子。谢谢
-
我还添加了代码的结果和问题
标签: matlab opencv camera-calibration homography