贡献者: addis
如果我们事先不知道相机参数,假设图片已经纠偏,假设光心在图片的中点,我们可以仅通过一个长方形在图片上的位置判断长方形的边长比,以及相对相机的位置。
找到图片上四边形的两组对边的交点,这两个点关于相机焦点的空间夹角必为直角,由此可以判断相机焦距。也就是说只要通过图片中的一个长方形就可以确定相机的焦距或者视角!
这两个点对应的射线就是两组平行线的方向,由此可以确定平面的法向量,令长方形的较短边长为 1,两条边分别为世界系的 $x$ 轴 和 $y$ 轴,由此可以确定相机的位置和方向。
两条射线的矢量分别为 $(x_1, y_1, f)$ 以及 $(x_2, y_2, f)$。
再算相机焦点发出的四条射线和空间四边形平面的交点,根据交点公式式 4 就可以解出长方形两条边长的比例(与平面是否平移无关)。
% 长方形相机定位法
% 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