相机标定-坐标系转换 附编程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_41649786/article/details/82115829

世界坐标、相机坐标、图像坐标、像素坐标的原理、关系,并用matlab仿真

照相机是日常生活中最常见的。它能把三维的空间图片等比例缩小投影在照片上,称为一个二维图像。

以下我们就讲一讲原理,并相应的进行matlab仿真。

在学之前,先要了解几个概念:

  • 什么是世界坐标?
    • 也就是真实世界的立体空间坐标,是一个三维坐标系
    • Ow-XwYwZw :世界坐标系,描述相机位置,单位m
  • 什么是相机坐标?
    • 根据透镜成像原理,将世界坐标在照相机内呈现,是一个三维坐标系
    • Oc-XcYcZc  :相机坐标系,光心为原点,单位m
  • 什么是图像坐标?
    • 将相机呈现的三维坐标投影到屏幕上,而建立的新坐标系,不含高程信息,是一个二维坐标系
    • o-xy :图像坐标系,原点为成像平面中点,单位mm
  • 什么是像素坐标?
    • 将投影的图像坐标离散抽样形成的做种图片,是一个二维的坐标系
    • uv :像素坐标系,原点为图像左上角,单位pixel

所以步骤流程就是:

    • step1:将世界坐标转化为相机坐标,等比例缩小,外加旋转平移,称之为刚体变换;
    • step2:将相机坐标转化为图像坐标,称为投影
    • step3:将图像坐标离散抽样

模型如下图所示:

step1:构造rigbt()函数

       世界坐标转化为相机坐标模型如下图所示:

 

从世界坐标系变换到相机坐标系属于刚体变换:即物体不会发生形变,只需要进行旋转和平移。

R:表示旋转矩阵

T:表示偏移向量

接下来分析旋转和平移

       坐标轴绕z轴旋转 θ=Theta(希腊字母读法,编程用的到),其几何模型如下图所示:

 

 公式满足:

 矩阵形式为:

同理,绕x、y轴可以写成:

所以刚体变化中旋转变换R=R1R2R3。

平移矩阵T,则刚体变换可以写成:

进一步转化,可以写成4阶矩阵:

R矩阵是一个3×3矩阵,T是一个3×1矩阵,RT是一个4×4矩阵。

matlab 仿真:


 
 
  1. function [RT] = rigbt(Phi, Psi, Theta, x0, y0, z0)
  2. %刚体变换函数:rigid body transformation
  3. %输入参数:
  4. % φ=Phi 绕x轴转动的角度
  5. % ψ=Psi 绕y轴转动的角度
  6. % θ=Theta 绕z轴转动的角度
  7. %输出参数:
  8. % RT 将坐标轴进行刚体变化(旋转+平移)成新的坐标轴
  9. %
  10. %% 程序
  11. R1 = [ 1 0 0; 0 cos(Phi) sin(Phi); 0 - sin(Phi) cos(Phi)];%绕X轴旋转
  12. R2 = [ cos(Psi) 0 - sin(Psi); 0 1 0; sin(Psi) 0 cos(Psi)];%绕Y轴旋转
  13. R3 = [ cos(Theta) sin(Theta) 0;- sin(Theta) cos(Theta) 0; 0 0 1 ];%绕Z轴旋转
  14. R = R3 * R1 * R2;%旋转矩阵(刚体变换一部分)
  15. T = [x0; y0; z0];%平移矩阵
  16. RT=[R T; 0 0 0 1];%刚体变换矩阵
  17. return

step2:构造proj()函数

相机坐标投影成图像坐标,几何模型如下图所示:

几何关系(相似)满足:

 

即:

 

代入:

写成矩阵形式:

matlab 仿真:


 
 
  1. function [Projection_Matrix] = proj(f)
  2. %相机坐标投影(projection)成图像坐标
  3. %输入参数
  4. % f 相机焦距(数,cm
  5. %输出参数
  6. % Projection_Matrix 投影成像(矩阵)
  7. Projection_Matrix = [f 0 0 0; 0 f 0 0; 0 0 1 0];
  8. return

 

step3:构造pixel()函数

 xoy是图像坐标; uo_{uv}v是像素坐标; (u0,v0)是像素坐标的中心; p(x,y)是图像中的任意一点。

模型如下:

 

将x、y分成n份,每份长度为dx、dy。

则几何公式为:

转化为矩阵形式:

 

matlab仿真:


 
 
  1. function [Pixel_Matrix] = pixel(dx,dy,u0,v0)
  2. %图像坐标离散化,转化为像素坐标
  3. %输入参数:
  4. % dx x轴方向上分辨率,像素大小
  5. % dy y轴方向上分辨率,像素大小
  6. % (u0,v0) 参考坐标,图像平面中心
  7. if nargin==2
  8. u0 = 0;
  9. v0 = 0;
  10. end
  11. Pixel_Matrix = [ 1/dx 0 u0; 0 1/dy v0; 0 0 1];
  12. return

step4:前三步整合

公式中, fx=f/dx,fy=f/dy。

matlab 主程序


 
 
  1. % 将世界坐标转化为像素坐标的参数
  2. %% 程序
  3. clear all; close all; clc;
  4. % 参数
  5. Phi = pi/ 4;%绕 x轴旋转角度
  6. Psi = pi/ 4;%绕 y轴旋转角度
  7. Theta = pi/ 4;%绕z轴旋转角度
  8. x 0 = 0;%x平移量
  9. y 0 = 0;%y平移量
  10. z 0 = 0;%z平移量
  11. f = 35e- 3;%35mm相机
  12. dx = 0. 026;%一个像素的长
  13. dy = 0. 026;%一个像素的宽
  14. u 0 = 0;%图像平面中心
  15. v 0 = 0;%图像平面中心
  16. %% step1:将世界坐标转化为相机坐标,等比例缩小,外加旋转平移(刚体变换)
  17. RT = rigbt(Phi, Psi, Theta, x 0, y 0, z 0);%刚体变换矩阵
  18. %% step2:将相机坐标转化为图像坐标(投影)
  19. Projection_Matrix = proj(f);%投影矩阵
  20. %% step3:将图像坐标离散抽样
  21. Pixel_Matrix = pixel(dx,dy,u 0,v 0);%1像素= 0. 635厘米÷ 240. 026458厘米
  22. %% 数据整合
  23. Camera_Internal_Parameters = Pixel_Matrix * Projection_Matrix;%相机内参数
  24. Camera_External_Parameters = RT;%相机外参数
  25. %清除不用的变量
  26. clearvars -except Camera_Internal_Parameters Camera_External_Parameters
  27. %相机参数
  28. Camera_Parameters = Camera_Internal_Parameters*Camera_External_Parameters
  29. clearvars -except Camera_Parameters%清除变量

仿真结果:

扩展:

实际应用中,往往将上面的主程序main制作成一个相机参数函数camera_ parameters(),更有利于调用。可以用下面相机参数函数一个代替上面的main程序。

matlab 仿真


 
 
  1. function [Camera_Parameters] = camera_parameters()
  2. % 将世界坐标转化为像素坐标的参数(相机参数矩阵)
  3. % 参数,可以省,省去的话,必须设置相应的入参
  4. Phi = pi/ 4;%绕 x轴旋转角度
  5. Psi = pi/ 4;%绕 y轴旋转角度
  6. Theta = pi/ 4;%绕z轴旋转角度
  7. x 0 = 0;%x平移量
  8. y 0 = 0;%y平移量
  9. z 0 = 0;%z平移量
  10. f = 35e- 3;%35mm相机
  11. dx = 0. 026;%一个像素的长
  12. dy = 0. 026;%一个像素的宽
  13. u 0 = 0;
  14. v 0 = 0;
  15. %% step1:将世界坐标转化为相机坐标,等比例缩小,外加旋转平移(刚体变换)
  16. RT = rigbt(Phi, Psi, Theta, x 0, y 0, z 0);%刚体变换矩阵
  17. %% step2:将相机坐标转化为图像坐标(投影)
  18. Projection_Matrix = proj(f);%投影矩阵
  19. %% step3:将图像坐标离散抽样
  20. Pixel_Matrix = pixel(dx,dy,u 0,v 0);%1像素= 0. 635厘米÷ 240. 026458厘米
  21. %% 数据整合
  22. Camera_Internal_Parameters = Pixel_Matrix * Projection_Matrix;%相机内参数
  23. Camera_External_Parameters = RT;%相机外参数
  24. %相机参数
  25. Camera_Parameters = Camera_Internal_Parameters*Camera_External_Parameters;

仿真结果:

 

注:

 

                                                                                                                 给学matlab的人,包括我自己一个勉励:路漫漫其修遠兮,吾將上下而求索

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值