计算机视觉基础之相机标定
发布时间
阅读量:
阅读量
昨天完成了用最小二乘法进行相机标定的实验。
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)
还没有任何评论哟~
