matlab建立二维坐标系,matlab – 从二维像素重建相机坐标系中的三维坐标 – 边条件...

我正在尝试使用边条件(在MatLab中)从相机图片中的2D像素坐标重建3D坐标.我确实有外在和内在的相机参数.

使用同质变换,我可以将3D坐标从初始世界坐标系转换为我的相机坐标系.所以我在变换矩阵R_world_to_Camera中有我的外部参数:

R_world_to_Camera = [ r_11, r_12, r_13, t1;

r_21, r_22, r_23, t2;

r_31, r_32, r_33, t3;

0, 0, 0, 1];

对于内在参数,我使用了Caltech的“MatLab相机校准工具箱”并获得了以下参数:

Calibration results (with uncertainties):

Focal Length: fc = [ 1017.21523 1012.54901 ] ± [ NaN NaN ]

Principal point: cc = [ 319.50000 239.50000 ] ± [ NaN NaN ]

Skew: alpha_c = [ 0.00000 ] ± [ NaN ] => angle of pixel axes = 90.00000 ± NaN degrees

Distortion: kc = [ 0.00000 0.00000 0.00000 0.00000 0.00000 ] ± [ NaN NaN NaN NaN NaN ]

Pixel error: err = [ 0.11596 0.14469 ]

Note: The numerical errors are approximately three times the standard deviations (for reference).

所以我得到了Camera-Calibration-Matrix K(3×3)

K = [1.017215234570303e+03, 0, 3.195000000000000e+02;

0, 1.012549014668498e+03,2.395000000000000e+02;

0, 0, 1.0000];

并使用这个我可以计算3D – > 2D – 投影 – 矩阵P(3×4):

P = K * [eye(3), zeros(3,1)];

在世界坐标[X,Y,Z] _World中转换点时,我首先将其转换为相机坐标,然后将其投影到2D:

% Transformation

P_world = [X; Y; Z; 1]; % homogenous coordinates in World coordinate System

P_camera = R_world_to_Camera * [X; Y; Z; 1];

% Projection

P_pixels = P * camera;

P_pixels = P_pixels / P_pixels(3); % normalize coordinates

所以我现在的问题是如何扭转这些步骤?作为边条件,我想设置Z坐标(世界坐标为零).我尝试了here on Stackoverflow提出的解决方案,但不知怎的,我得到了错误的坐标.任何的想法?每一个帮助都很受欢迎!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matlab 相机标定代码 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵的过程。 [1]基本的坐标系: 世界坐标系相机坐标系; 成像平面坐标系; 像坐标系 [2]一般来说,标定的过程分为两个部分: 第一步是从世界坐标系转为相机坐标系,这一步是三维点到三维点的转换,包括R,t(相机外参,确定了相机在某个三维空间的位置和朝向)等参数; 第二部是从相机坐标系转为成像平面坐标系(像坐标系),这一步是三维点到二维点的转换,包括K(相机内参,是对相机物理特性的近似)等参数; 投影矩阵 : P=K [ R | t ] 是一个3×4矩阵,混合了内参和外参而成。 P=K[Rt] 二.基本知识介绍及 1、摄像机模型 Pinhole Camera模型如下图所示: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 是一个小孔成像的模型,其: [1]O点表示camera centre,即相机心点,也是相机坐标系心点; [2]z轴表示principal axis,即相机的主轴; [3]q点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面; [4]O1点表示principal point,即主点,主轴与像平面相交的点; [5]O点到O1点的距离,也就是右边图的f,即相机的焦距; [6]像平面上的x和y坐标轴是与相机坐标系上的X和Y坐标轴互相平行的; [7]相机坐标系是以X,Y,Z(大写)三个轴组成的且原点在O点,度量值为米(m); [8]像平面坐标系是以x,y(小写)两个轴组成的且原点在O1点,度量值为米(m); [9]像坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像的个数(pixel); 2、相机坐标系→成像平面坐标系 [1]以O点为原点建立摄像机坐标系。点Q(X,Y,Z)为摄像机坐标系空间的一点,该点被光线投影到图像平面上的q(x,y,f)点。 图像平面与光轴z轴垂直,和投影心距离为f (f是相机的焦距)。按照三角比例关系可以得出: x/f = X/Z y/f = Y/Z ,即 x = fX/Z y = fY/Z 以图像平面的左上角或左下角为原点建立坐标系。假设像平面坐标系原点位于图像左下角,水平向右为u轴,垂直向上为v轴,均以像为单位。 以图像平面与光轴的交点O1 为原点建立坐标系,水平向右为x轴,垂直向上为y轴。原点O1一般位于图像心处,O1在以像为单位的图像坐标系坐标为(u0, v0)。 像平面坐标系和像坐标系虽然在同一个平面上,但是原点并不是同一个。 摄像机模型与标定 - 小企鹅 - 企鹅的博客 设每个像的物理尺寸大小为 dx * dy (mm) ( 由于单个像点投影在图像平面上是矩形而不是正方形,因此可能dx != dy), 图像平面上某点在成像平面坐标系坐标为(x, y),在像坐标系坐标为(u, v),则二者满足如下关系:[即(x, y)→(u, v)] u = x / dx + u0 v = y / dy + v0 用齐次坐标与矩阵形式表示为: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 将等式两边都乘以点Q(X,Y,Z)坐标的Z可得: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 将摄像机坐标系的(1)式代入上式可得: 则右边第一个矩阵和第二个矩阵的乘积亦为摄像机的内参数矩阵(单位为像),相乘后可得: (2) 和(1)式相比,此内参数矩阵f/dx, f/dy, cx/dx+u0, cy/dy+v0 的单位均为像。令内参数矩阵为K,则上式可写成: 摄像机模型与标定 - 小企鹅 - 企鹅的博客 (3) 三.相机内参K(与棋盘所在空间的3D几何相关) 在计算机视觉,摄像机内参数矩阵 其 f 为摄像机的焦距,单位一般是mm;dx,dy 为像元尺寸;u0,v0 为图像心。 fx = f/dx, fy = f/dy,分别称为x轴和y轴上的归一化焦距. 为更好的理解,举个实例: 现以NiKon D700相机为例进行求解其内参数矩阵: 就算大家身边没有这款相机也无所谓,可以在网上百度一下,很方便的就知道其一些参数—— 焦距 f = 35mm 最高分辨率:4256×2832 传感器尺寸:36.0×23.9 mm 根据以上定义可以有: u0= 4256/2 = 2128 v0= 2832/2 = 1416 dx = 36.0/4256 dy = 23.9/2832 fx = f/dx = 4137.8 fy = f/dy = 4147.3 分辨率可以从显示分辨率与图像分辨率两个方向来分类。 [1]显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像有多少。由于屏幕上的点、线和面都是由像组成的, 显示器可显示的像越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。 可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。 显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。 [2]图像分辨率则是单位英寸所包含的像点数,其定义更趋近于分辨率本身的定义。 四.畸变参数(与点集如何畸变的2D几何相关。) 采用理想针孔模型,由于通过针孔的光线少,摄像机曝光太慢,在实际使用均采用透镜,可以使图像生成迅速,但代价是引入了畸变。 有两种畸变对投影图像影响较大: 径向畸变和切向畸变。 1、径向畸变 对某些透镜,光线在远离透镜心的地方比靠近心的地方更加弯曲,产生“筒形”或“鱼眼”现象,称为径向畸变。 一般来讲,成像仪心的径向畸变为0,越向边缘移动,畸变越严重。不过径向畸变可以通过下面的泰勒级数展开式来校正: xcorrected = x(1+k1r2+k2r4+k3r6) ycorrected = y(1+k1r2+k2r4+k3r6) 这里(x, y)是畸变点在成像仪上的原始位置,r为该点距离成像仪心的距离,(xcorrected ,ycorrected )是校正后的新位置。 对于一般的摄像机校正,通常使用泰勒级数的前两项k1和k2就够了;对畸变很大的摄像机,比如鱼眼透镜,可以使用第三径向畸变项k3 2、切向畸变 当成像仪被粘贴在摄像机的时候,会存在一定的误差,使得图像平面和透镜不完全平行,从而产生切向畸变。也就是说,如果一个矩形被投影到成像仪上时, 可能会变成一个梯形。切向畸变可以通过如下公式来校正: xcorrected = x + [ 2p1y + p2 (r2 + 2x2) ] ycorrected = y + [ 2p2x + p1 (r2 + 2y2) ] 这里(x, y)是畸变点在成像仪上的原始位置,r为该点距离成像仪心的距离,(xcorrected ,ycorrected )是校正后的新位置。 五.摄像机的外参数 旋转向量(大小为1×3的矢量或旋转矩阵3×3)和平移向量(tx,ty,tz)。 旋转向量:旋转向量是旋转矩阵紧凑的变现形式,旋转向量为1×3的行矢量。 r就是旋转向量,旋转向量的方向是旋转轴 ,旋转向量的模为围绕旋转轴旋转的角度。 通过上面的公式,我们就可以求解出旋转矩阵R。同样的已知旋转矩阵,我们也可以通过下面的公式求解得到旋转向量: 。
MATLAB绘制三维坐标系可以使用meshgrid函数和plot3函数。首先,使用meshgrid函数生成三维坐标系的网格采样点,然后使用plot3函数将坐标轴和网格点连接起来。具体步骤如下: 1. 使用meshgrid函数生成三维坐标系的网格采样点。meshgrid函数可以生成两个二维矩阵,分别表示x、y坐标轴上的采样点。例如,可以使用以下代码生成一个网格采样点: ``` \[X, Y\] = meshgrid(-10:10, -10:10); ``` 2. 使用plot3函数绘制坐标轴和网格点。可以使用以下代码绘制坐标轴: ``` plot3(\[0, 0\], \[0, 0\], \[-10, 10\], 'k'); % x轴 plot3(\[0, 0\], \[-10, 10\], \[0, 0\], 'k'); % y轴 plot3(\[-10, 10\], \[0, 0\], \[0, 0\], 'k'); % z轴 ``` 然后,可以使用以下代码绘制网格点: ``` plot3(X(:), Y(:), zeros(size(X(:))), 'ro'); % 网格点 ``` 这样就可以在三维坐标系绘制出坐标轴和网格点了。 综上所述,使用meshgrid函数生成网格采样点,然后使用plot3函数绘制坐标轴和网格点,就可以在MATLAB绘制三维坐标系。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [MATLAB三维坐标及函数案例实现](https://blog.csdn.net/weixin_42691585/article/details/106685567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [三、matlab绘制三维坐标图](https://blog.csdn.net/cxrcxr19970822/article/details/121636204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Matlab坐标系绘制](https://blog.csdn.net/Q1302182594/article/details/46508833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值