从现实世界到图像的投影坐标系:
(x, y, z)→(x', y', -d),注意这个示意图中不包含左右,上下的翻转变化。
根据相似三角形理论可以算出:(x, y, z)→(-dx/z, -dy/z, -d), 由于z是变量,所以这并不是一个线性变换。加入一个齐次项,在齐次坐标系下,我们可以通过矩阵的线性操作完成投影。
代码如下:
% Project a point from 3D to 2D using a matrix operation
%% Given: Point p in 3-space [x y z], and focal length f
%% Return: Location of projected point on 2D image plane [u v]
%% Test: Given point and focal length (units: mm)
p = [200 100 120];
f = 50;
function p_img = project_point(p, f)
%% TODO: Define and apply projection matrix
A = [f 0 0 0;
0 f 0 0;
0 0 1 0];
p_hom = [p 1]';
p_proj = A * p_hom;
%disp(p_proj(2)/p_proj(3));
p_img = [(p_proj(1)/p_proj(3)),(p_proj(2)/p_proj(3))];
endfunction
%% Test: Given point and focal length (units: mm)
p = [200 100 100];
f = 50;
pimg = project_point(p, f);
disp(pimg);