单应性及透视变换

1 单应性(Homography)

为了实现逆透视变换,首先要先理解单应性。
平面上某点 P ,在世界坐标系下和图像坐标系下的坐标分别表示为M m ,则:

sm˜=A[R,t]M˜

其中, s 为尺度因子,A为内参矩阵, R,t 统称为外参矩阵,将其展开如下:

suv1=A[r1r2r3t]XYZ1
由于在同一平面下,另 z=0 ,—》
suv1=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));
    end

end

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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值