Advertisement

计算机视觉基础之相机标定

阅读量:

昨天完成了用最小二乘法进行相机标定的实验。

1. 最小二乘法进行相机标定的原理

1.1 坐标系变换

将实物拍到相机的胶片上需要进过几个坐标系的变换:

世界坐标系—>相机坐标系—成像坐标系—>像素坐标系

在坐标系变换的过程中可以看做是将变换矩阵线性作用于齐次向量

从世界坐标系变换到相机坐标系:

在其中,在全局坐标系中对应着相应的全局点,在相机空间中对应着相应的相机空间中的点,在图像平面内对应着相应的像素点。

那么可以得到:

我们已有全局坐标系和图像平面坐标的对应关系,在此基础上确定矩阵M中的未知参数即为相机标定的过程

1.2 最小二乘法求解

用最小二乘法进行求解就是要使的U,那么就要求达到最小,就是要求:

所以只要求解最小特征值对应的特征向量,就可以求解出最优解。

2.代码

复制代码
    [M,N]=size(P);
    %矩阵A
    for i=1:N
    A(2*i-1,1:4)=[P(1:3,i);1]';
    A(2*i-1,5:8)=[0 0 0 0];
    A(2*i-1,9:12)=-P(4,i)*[P(1:3,i);1]';
    A(2*i,1:4)=[0 0 0 0];
    A(2*i,5:8)=[P(1:3,i);1]';
    A(2*i,9:12)=-P(4,i)*[P(1:3,i);1]';
    end
    AA=A'*A;
    [V D]=eig(AA);
    %求解特征值和特征向量
    a(1,1:3)=V(1,1:3);b(1,1)=V(1,4);[M,N]=size(P);
    %求得最小的特征值对应的特征向量
    a(1,1:3)=V(1,1:3);b(1,1)=V(1,4);
    a(2,1:3)=V(1,5:7);b(2,1)=V(1,8);
    a(3,1:3)=V(1,9:11);b(3,1)=V(1,12);
    e=1;
    %ε=1
    p=e/norm(a(3,:));
    % ρ=ε/||a3||
    r(3,:)=p*a(3,:);
    %r3=p* a3
    u0=p^2*a(1,:)*(a(3,:))';
    %u0=P2*a1*a3
    v0=p^2*a(2,:)*(a(3,:))'; 
    %v0=P2*a2*a3
    cos_zeta=-(cross(a(1,:),a(3,:))*(cross(a(2,:),a(3,:)))')/(norm(cross(a(1,:),a(3,:)))*norm(cross(a(2,:),a(3,:))));
    %cos(ө)=-((a1×a3)‘*(a2×a3))/(|(|a2*a3|)|*||a1×a3||)
    zeta=acos(cos_zeta);
    alpha=p^2*norm(cross(a(1,:),a(3,:)))*sin(zeta);
    %α=ρ2 ||a1×a3||
    beta=p^2*norm(cross(a(2,:),a(3,:)))*sin(zeta); 
    %β=ρ2 ||a2×a3||
    t_x=p/alpha*(b(1)+alpha/(2*beta)*sin(2*zeta)*b(2)-(alpha/(2*beta)*sin(2*zeta)*v0+u0)*b(3));
    %t_x=ρ/α*(b1+α/(2ρ)*sin(2ө)*b2-b3*(α/(2β)*sin(2ө)*v0+u0)
    t_y=p*sin(zeta)/beta*(b(2)-v0*b(3));
    %t_y=ρ*sin(ө)/β*(b2-v0b3)
    t_z=p*b(3);
    %t_z=ρ*b3

全部评论 (0)

还没有任何评论哟~