长方形相机定位法

                     

贡献者: 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
% 长方形相机定位法
% 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


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利