win7做网站,个人网站不能放广告怎么赚钱,多个网站集成在一个页面,开发者选项在哪里关闭世界坐标、相机坐标、图像坐标、像素坐标的原理、关系#xff0c;并用matlab仿真
照相机是日常生活中最常见的。它能把三维的空间图片等比例缩小投影在照片上#xff0c;称为一个二维图像。
以下我们就讲一讲原理#xff0c;并相应的进行matlab仿真。
在学之前#xff0…世界坐标、相机坐标、图像坐标、像素坐标的原理、关系并用matlab仿真
照相机是日常生活中最常见的。它能把三维的空间图片等比例缩小投影在照片上称为一个二维图像。
以下我们就讲一讲原理并相应的进行matlab仿真。
在学之前先要了解几个概念
什么是世界坐标 也就是真实世界的立体空间坐标是一个三维坐标系Ow-XwYwZw 世界坐标系,描述相机位置,单位m什么是相机坐标 根据透镜成像原理将世界坐标在照相机内呈现是一个三维坐标系Oc-XcYcZc 相机坐标系,光心为原点,单位m什么是图像坐标 将相机呈现的三维坐标投影到屏幕上而建立的新坐标系不含高程信息是一个二维坐标系o-xy 图像坐标系,原点为成像平面中点,单位mm什么是像素坐标 将投影的图像坐标离散抽样形成的做种图片是一个二维的坐标系uv 像素坐标系,原点为图像左上角,单位pixel
所以步骤流程就是 step1将世界坐标转化为相机坐标等比例缩小外加旋转平移称之为刚体变换step2将相机坐标转化为图像坐标称为投影step3将图像坐标离散抽样
模型如下图所示 step1构造rigbt()函数 世界坐标转化为相机坐标模型如下图所示 从世界坐标系变换到相机坐标系属于刚体变换即物体不会发生形变只需要进行旋转和平移。
R表示旋转矩阵
T表示偏移向量
接下来分析旋转和平移 坐标轴绕z轴旋转 θTheta希腊字母读法编程用的到其几何模型如下图所示 公式满足 矩阵形式为 同理绕x、y轴可以写成 所以刚体变化中旋转变换RR1R2R3。
平移矩阵T则刚体变换可以写成 进一步转化可以写成4阶矩阵 R矩阵是一个3×3矩阵T是一个3×1矩阵RT是一个4×4矩阵。
matlab 仿真
function [RT] rigbt(Phi, Psi, Theta, x0, y0, z0)
%刚体变换函数:rigid body transformation
%输入参数
% φPhi 绕x轴转动的角度
% ψPsi 绕y轴转动的角度
% θTheta 绕z轴转动的角度
%输出参数
% RT 将坐标轴进行刚体变化旋转平移成新的坐标轴
%
%% 程序
R1 [1 0 0; 0 cos(Phi) sin(Phi); 0 -sin(Phi) cos(Phi)];%绕X轴旋转
R2 [cos(Psi) 0 -sin(Psi); 0 1 0; sin(Psi) 0 cos(Psi)];%绕Y轴旋转
R3 [cos(Theta) sin(Theta) 0;-sin(Theta) cos(Theta) 0; 0 0 1 ];%绕Z轴旋转
R R3 * R1 * R2;%旋转矩阵刚体变换一部分
T [x0; y0; z0];%平移矩阵
RT[R T;0 0 0 1];%刚体变换矩阵
returnstep2构造proj()函数
相机坐标投影成图像坐标几何模型如下图所示 几何关系相似满足 即 代入 写成矩阵形式 matlab 仿真
function [Projection_Matrix] proj(f)
%相机坐标投影(projection)成图像坐标
%输入参数
% f 相机焦距数cm
%输出参数
% Projection_Matrix 投影成像矩阵
Projection_Matrix [f 0 0 0; 0 f 0 0; 0 0 1 0];
return step3构造pixel()函数 xoy是图像坐标 uo_{uv}v是像素坐标 (u0,v0)是像素坐标的中心 p(x,y)是图像中的任意一点。
模型如下 将x、y分成n份每份长度为dx、dy。
则几何公式为 转化为矩阵形式 matlab仿真:
function [Pixel_Matrix] pixel(dx,dy,u0,v0)
%图像坐标离散化转化为像素坐标
%输入参数
% dx x轴方向上分辨率像素大小
% dy y轴方向上分辨率像素大小
% (u0,v0) 参考坐标图像平面中心
if nargin2u0 0;v0 0;
end
Pixel_Matrix [1/dx 0 u0; 0 1/dy v0; 0 0 1];
return step4前三步整合
公式中 fxf/dx,fyf/dy。 matlab 主程序
% 将世界坐标转化为像素坐标的参数
%% 程序
clear all;close all; clc;
% 参数
Phi pi/4;%绕x轴旋转角度
Psi pi/4;%绕y轴旋转角度
Theta pi/4;%绕z轴旋转角度
x0 0;%x平移量
y0 0;%y平移量
z0 0;%z平移量
f 35e-3;%35mm相机
dx 0.026;%一个像素的长
dy 0.026;%一个像素的宽
u0 0;%图像平面中心
v0 0;%图像平面中心%% step1:将世界坐标转化为相机坐标等比例缩小外加旋转平移(刚体变换)
RT rigbt(Phi, Psi, Theta, x0, y0, z0);%刚体变换矩阵%% step2:将相机坐标转化为图像坐标(投影)
Projection_Matrix proj(f);%投影矩阵%% step3:将图像坐标离散抽样
Pixel_Matrix pixel(dx,dy,u0,v0);%1像素0.635厘米÷24≈0.026458厘米
%% 数据整合
Camera_Internal_Parameters Pixel_Matrix * Projection_Matrix;%相机内参数
Camera_External_Parameters RT;%相机外参数
%清除不用的变量
clearvars -except Camera_Internal_Parameters Camera_External_Parameters
%相机参数
Camera_Parameters Camera_Internal_Parameters*Camera_External_Parameters
clearvars -except Camera_Parameters%清除变量仿真结果 扩展
实际应用中往往将上面的主程序main制作成一个相机参数函数camera_ parameters()更有利于调用。可以用下面相机参数函数一个代替上面的main程序。
matlab 仿真
function [Camera_Parameters] camera_parameters()
% 将世界坐标转化为像素坐标的参数(相机参数矩阵)
% 参数,可以省省去的话必须设置相应的入参
Phi pi/4;%绕x轴旋转角度
Psi pi/4;%绕y轴旋转角度
Theta pi/4;%绕z轴旋转角度
x0 0;%x平移量
y0 0;%y平移量
z0 0;%z平移量
f 35e-3;%35mm相机
dx 0.026;%一个像素的长
dy 0.026;%一个像素的宽
u0 0;
v0 0;%% step1:将世界坐标转化为相机坐标等比例缩小外加旋转平移(刚体变换)
RT rigbt(Phi, Psi, Theta, x0, y0, z0);%刚体变换矩阵%% step2:将相机坐标转化为图像坐标(投影)
Projection_Matrix proj(f);%投影矩阵%% step3:将图像坐标离散抽样
Pixel_Matrix pixel(dx,dy,u0,v0);%1像素0.635厘米÷24≈0.026458厘米
%% 数据整合
Camera_Internal_Parameters Pixel_Matrix * Projection_Matrix;%相机内参数
Camera_External_Parameters RT;%相机外参数
%相机参数
Camera_Parameters Camera_Internal_Parameters*Camera_External_Parameters; 仿真结果 注
程序中好多参数是本人找的有的参数我简单化了。也可以改参数运行。本文参考了https://download.csdn.net/download/chentravelling/9833120本博客文档下载地址https://download.csdn.net/download/weixin_41649786/10629546本博客代码下载地址https://download.csdn.net/download/weixin_41649786/10629733给学matlab的人包括我自己一个勉励:路漫漫其修遠兮吾將上下而求索