我想从该点的给定像素坐标估计距离(相机到地面上的点:这意味着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坐标是<&lt;&lt; 1米,(因为有效像素大小以米为单位= 10 ^ -5)
这是我的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 arbitary 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'
谢谢
答案 0 :(得分:1)
你的程序是正确的,但它的方向是错误的。 见link。使用内在和外在校准矩阵,您可以找到真实世界向量的像素空间位置,而不是相反。例外情况是,如果您的相机在全局框架中静止并且您在全局空间中具有该要素的Z位置。
固定摄像机,已知功能Z案例:(另见this link)
%% First we simulate a camera feature measurement
K = [0.5 0 320;
0 0.5 240;
0 0 1]; % Example intrinsics
R = rotx(0)*roty(0)*rotz(pi/4); % orientation of camera in global frame
c = [1; 1; 1]; %Pos camera in global frame
rwPt = [ 10; 10; 5]; %position of a feature in global frame
imPtH = K*R*(rwPt - c); %Homogeneous image point
imPt = imPtH(1:2)/imPtH(3) %Actual image point
%% Now we use the simulated image point imPt and the knowledge of the
% features Z coordinate to determine the features X and Y coordinates
%% First determine the scaling term lambda
imPtH2 = [imPt; 1];
z = R.' * inv(K) * imPtH2;
lambda = (rwPt(3)-c(3))/z(3);
%% Now the RW position of the feature is:
rwPt2 = c + lambda*R.' * inv(K) * imPtH2 % Reconstructed RW point
非固定相机包:
要查找从相机到特定要素(在图像平面上给出)的真实世界位置或距离,您必须采用某种方法从2D图像重建3D数据。
立即浮现在脑海中的两个是opencv&#39; solvePnP和stereo-vision depth estimation。 solvePnP需要在图像中提供4个共面(在RW空间中)特征,并且已知RW空间中的特征的位置。这可能听起来不太有用,因为您需要知道要素的RW位置,但您可以使用已知偏移量而不是全局帧中的位置来定义4个要素 - 结果将是相机在帧中的相对位置定义了特征.resolutionPnP给出了非常相机的准确姿态估计。查看我的example。
立体视觉深度估计需要在两个空间分离的图像中找到相同的特征,并且RW空间中的图像之间的转换必须精确地知道非常。
可能还有其他方法,但这些是我熟悉的两种方法。