从现实世界到图像的投影坐标系:面试
(x, y, z)→(x', y', -d),注意这个示意图中不包含左右,上下的翻转变化。app
根据类似三角形理论能够算出:(x, y, z)→(-dx/z, -dy/z, -d), 因为z是变量,因此这并非一个线性变换。加入一个齐次项,在齐次坐标系下,咱们能够经过矩阵的线性操做完成投影。函数
代码以下:(刚开始运行的时候,总是报calling error,但是网上没太多教程,我随便把变量赋值放在函数定义前面试了试,居然成功了==)spa
% 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);