MATLAB 相机标定中标定板角点像素坐标系到世界坐标系的转换

news/2024/10/17 15:32:10/

matlab 做相机标定后,想将第一张(任意一张都行)标定板角点所对应的像素坐标转换到世界坐标系下,标定板角点的像素坐标真值与世界坐标真值都非常容易获得,但是我通过内外参矩阵将像素坐标转换到世界坐标有很大的误差,如下

close all;
clear all;
clc;
load ('6mm_matlab.mat')
% 相机标定基本参数
M = cameraParams.IntrinsicMatrix';
R = cameraParams.RotationMatrices(:,:,1);
T = cameraParams.TranslationVectors(1,:)';
UV = cameraParams.ReprojectedPoints(:,:,1);
% 将标定板角点像素坐标转换成齐次
for i = 1:size(UV,1)UV_H(i,:) = [UV(i,:),1];
end
% 将像素坐标系转换到像素坐标系,公式参考: https://blog.csdn.net/qq_43222384/article/details/101516807
leftMatrix = inv(R)*inv(M)*UV_H';
rightMatrix = inv(R)*T;
rightMatrix_H = repmat(rightMatrix(3),[1,size(UV,1)]);
temp_s = rightMatrix_H./leftMatrix(3,:);
N_rightMatrix = repmat(rightMatrix,1,size(UV,1));
CB_World = temp_s.*leftMatrix - N_rightMatrix;

像素坐标到世界坐标之间的转换可参考如下公式

已知像素坐标\left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right],世界坐标\left[ \begin{array}{c} X_w\\ Y_w\\ 0\\ \end{array} \right],内参矩阵 M,旋转矩阵 R,平移向量 T。

则有:s\left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right] =MR\left[ \begin{array}{c} X_w\\ Y_w\\ 0\\ \end{array} \right] +T

sR^{-1}M^{-1}\left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right] =\left[ \begin{array}{c} X_w\\ Y_w\\ 0\\ \end{array} \right] +R^{-1}T

\left[ \begin{array}{c} a\\ b\\ c\\ \end{array} \right] =R^{-1}M^{-1}\left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right]\left[ \begin{array}{c} t_1\\ t_2\\ t_3\\ \end{array} \right] =R^{-1}T

解得s=\frac{t_3}{c}

所以\left[ \begin{array}{c} X_w\\ Y_w\\ 0\\ \end{array} \right] =\frac{t_3}{c}\left[ \begin{array}{c} a\\ b\\ c\\ \end{array} \right] -\left[ \begin{array}{c} t_1\\ t_2\\ t_3\\ \end{array} \right]

Matlab 标定后的相机参数如下:

内参矩阵:M=\left[ \begin{matrix} 1768& 0& 749.7\\ 0& 1768& 586\\ 0& 0& 1\\ \end{matrix} \right],旋转矩阵:R=\left[ \begin{matrix} -0.9900& 0.1411& 0.0046\\ -0.1403& -0.9868& 0.0803\\ 0.0159& 0.0788& 0.9968\\ \end{matrix} \right],

平移向量:T\ =\ \left[ \begin{array}{c} 92.755\\ 52.092\\ 422.884\\ \end{array} \right]

世界坐标系下的点到像素坐标系下的转化关系可表示为:

s\left( \begin{array}{c} u_1\\ v_1\\ 1\\ \end{array} \right) =\left[ \begin{matrix} 1768& 0& 749.7\\ 0& 1768& 586\\ 0& 0& 1\\ \end{matrix}\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] \left[ \begin{matrix} -0.9900& 0.1411& 0.0046& 92.755\\ -0.1403& -0.9868& 0.0803& 52.092\\ 0.0159& 0.0788& 0.9968& 422.884\\ 0& 0& 0& 1\\ \end{matrix} \right] \left( \begin{array}{c} X_w\\ Y_w\\ 0\\ 1\\ \end{array} \right)

标定板的间距为10mm,随意带两个世界坐标系下的点(0,0)和(0,10)

算出来得结果分别为\left( \begin{array}{c} 0.3893\\ 0.1518\\ 0\\ \end{array} \right)\left( \begin{array}{c} 3.1293\\ 9.7074\\ 0\\ \end{array} \right)

计算结果和真值的误差较大,在世界坐标系下的Y轴上的角点应该接近 0 实际上Y轴上的值逐渐增大,可以观察下面的计算结果

世界坐标系下的真值为:

通过上述公式计算得到的世界坐标结果:

我标定的重投影误差再0.04以内,其它各个参数也符合,为什么数据的误差会这么大呢?而且这个数据变化也有一定的规律,这是怎么回事呢?

相机标定图像

链接:百度网盘 请输入提取码

提取码:john

已解决:matlab做相机标定,内参矩阵与旋转矩阵都需要做转置后才能使用


http://www.ppmy.cn/news/431970.html

相关文章

计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

0.前言 最近整理了“相机成像原理”和“视差与深度信息”相关的资料,然后做成了PPT,以备自己用,也提供给相关的图像、视觉方向的朋友参考。如有误,望海涵并指出。 1.正文 图像处理、立体视觉等等方向常常涉及到四个坐标系&…

相机坐标系、像素坐标系转换

相机内参矩阵是相机的重要参数之一,它描述了相机光学系统的内部性质,例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中,相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标,或者将相机坐标系…

像素坐标系、图像坐标系、相机坐标系、世界坐标系

像素坐标系、图像坐标系、相机坐标系、世界坐标系 文章目录 像素坐标系、图像坐标系、相机坐标系、世界坐标系1、图像坐标系 → \rightarrow →​像素坐标系2、图像坐标系 → \rightarrow →​相机坐标系3、相机坐标系 → \rightarrow →​世界坐标系总结References 上周发现对…

相机成像---世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系

新学期第一天开始写的这篇文章,看看我啥时候能把他发出去。假期当然是啥也没干了,之前还信誓旦旦说回家一定能学习,学个毛线。开始学习啦,去年年末把环境配置好了之后,实验发现他不准,用的D435i摄像头是红外…

世界坐标系、相机坐标系、图像坐标系、像素坐标系

四个坐标系都是什么? 1.世界坐标系->相机坐标系->图像坐标系->像素坐标系 2.像素坐标系->图像坐标系->相机坐标系->世界坐标系 图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系 构…

像素(Pixel)、DPI与PPI一看就明白

像素(Pixel)、DPI与PPI 像素(Pixel)DPI 英文全写是(Dots Per Inch,每英寸点数)PPI 英文全写是(Pixels Per Inch,每英寸像素数)比喻来区分应用(这张图熟悉吗)1.分辨率啥意思&#xff…

蛇优化算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 蛇优化算法算法流程图初始化进化操作搜索阶段(无食物)——全局搜索搜索阶段(有食物)——局部搜索战斗模式交配模式 备…

Linux之线程安全(下)

文章目录 前言一、Linux线程互斥1.mutex的理解锁原子性互斥锁实现原子性的原理 2.mutex的封装——Mutex.hpp3.可重入和线程安全可重入线程安全线程安全不一定是可重入的,而可重入函数一定是线程安全的。 4.死锁概念造成死锁的四个必要条件如何避免死锁 二、Linux线程…