首页 > 学院 > 开发设计 > 正文

单应性及透视变换

2019-11-06 08:41:19
字体:
来源:转载
供稿:网友

1 单应性(Homography)

为了实现逆透视变换,首先要先理解单应性。 平面上某点P,在世界坐标系下和图像坐标系下的坐标分别表示为Mm,则: sm˜=A[R,t]M˜ 其中,s为尺度因子,A为内参矩阵,R,t统称为外参矩阵,将其展开如下: s⎡⎣⎢uv1⎤⎦⎥=A[r1r2r3t]⎡⎣⎢⎢⎢XYZ1⎤⎦⎥⎥⎥由于在同一平面下,另z=0,—》 s⎡⎣⎢uv1⎤⎦⎥=A[r1r2r3t]⎡⎣⎢⎢⎢XY01⎤⎦⎥⎥⎥=A[r1r2t]⎡⎣⎢XY1⎤⎦⎥H=A[r1r2t],则H为单应性矩阵,sm˜=HM˜。 求解推导如下: 这里写图片描述

最少根据四个点,建立8个方程,求解出h′。具体的求解方法为利用SVD分解。 具体求解方法可参看张正友文章: Homography Estimation

2 逆透视

透视变换是利用小孔成像原理,将世界坐标下的物体变换到图像坐标系下,而逆透视变换是其反变换,是已知图像将其变换到世界坐标下。 为了满足单应性使用条件,我们限定变换的所有目标点在世界坐标系下共平面。 基本流程如下:

1 建立图像坐标系和世界坐标系 2. 获取至少4个点对坐标,本示例使用标定板的四个顶点坐标。 3. 根据4个点对计算H单应性矩阵. 4. 生成世界坐标系下的坐标网络 5. 映射至图像坐标系下,获取对应像素值,填充世界坐标系下坐标网络。 世界所坐标系建立如下: 这里写图片描述

先上逆透视结果: 这里写图片描述

nx=330;ny=360;% 棋盘格四个在图像上的四个顶点像素坐标m=[ 434.655350296612 500.590117151691 133.931698403274 168.688463982752; 196.481734108317 386.841185548903 377.658238152848 179.933135570341; 1 1 1 1 ];% 棋盘格在世界坐标系下的坐标(无量纲,不考虑单位)M=[ 1 nx nx 1; ny ny 1 1; 1 1 1 1];% 根据4个点对,计算单应性矩阵[Homo,Hnorm,inv_Hnorm] = compute_homography(m,M);x_l=[-300:nx+100];y_l=[-300:ny+100];SX=length(x_l);SY=length(y_l);% 生成世界坐标系下坐标(无量纲,不考虑单位)x_l=x_l'*ones(1,SY);y_l=ones(SX,1)*y_l;pts=[x_l(:) y_l(:) ones(SX*SY,1)]';% 计算所有点对下的映射XX = Homo*pts;XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));XX=fix(XX+0.5);%% 像素重映射out_img=zeros(SX*SY,1);for i=1:SX*SY if XX(1,i)>640 || XX(2,i)>480 || XX(1,i)<1 || XX(2,i) <1 ; else out_img(i)=input_img(XX(2,i),XX(1,i)); endend

参考: 《A Flexible New Technique for Camera Calibration》


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表