长方形相机定位法

                     

贡献者: addis

  • 本文处于草稿阶段。
预备知识 相机模型,直线和平面的交点

   如果我们事先不知道相机参数,假设图片已经纠偏,假设光心在图片的中点,我们可以仅通过一个长方形在图片上的位置判断长方形的边长比,以及相对相机的位置。

思路

   找到图片上四边形的两组对边的交点,这两个点关于相机焦点的空间夹角必为直角,由此可以判断相机焦距。也就是说只要通过图片中的一个长方形就可以确定相机的焦距或者视角!

   这两个点对应的射线就是两组平行线的方向,由此可以确定平面的法向量,令长方形的较短边长为 1,两条边分别为世界系的 $x$ 轴 和 $y$ 轴,由此可以确定相机的位置和方向。

   两条射线的矢量分别为 $(x_1, y_1, f)$ 以及 $(x_2, y_2, f)$。

\begin{equation} (x_1, y_1, f) \boldsymbol\cdot (x_2, y_2, f) = x_1 x_2 + y_1 y_2 + f^2 = 0~, \end{equation}
\begin{equation} f = \sqrt{-x_1 x_2 - y_1 y_2}~. \end{equation}
这就得到了相机的焦距。也得到了长方形的两条边的向量 $ \hat{\boldsymbol{\mathbf{u}}} , \hat{\boldsymbol{\mathbf{v}}} $。

   再算相机焦点发出的四条射线和空间四边形平面的交点,根据交点公式式 4 就可以解出长方形两条边长的比例(与平面是否平移无关)。

  

未完成:代码未完成
代码 1:rect2cam.m
% 长方形相机定位法
% https://wuli.wiki/online/RecCam.html
function f = rect2cam(xy4)
error('not finished');
% 照片上长方形的四条边(射线)
l12 = p22l(xy4(1,:), xy4(2,:));
l43 = p22l(xy4(4,:), xy4(3,:));
l41 = p22l(xy4(4,:), xy4(1,:));
l32 = p22l(xy4(3,:), xy4(2,:));
% 两个消失点
pol_x = l22p(l12, l43);
pol_y = l22p(l41, l32);
% 焦距
f = sqrt(-pol_x(1)*pol_x(2) - pol_y(1)*pol_y(2));
% 从焦点出发的四条射线
end

                     

© 小时科技 保留一切权利