MATLAB单目相机标定的使用并导出XML文件
前言
本文参考MATLAB相机标定的使用并导出XML文件。在此基础上,增加了获取输出某张标定图像对应的外参(旋转矩阵和平移向量功能)。同时,对畸变参数重新做了取舍,去除了径向畸变k3,即在标定前按默认选择“2 Coefficient”。

省略的标定工作。。。
参数导出XML
通过编写MATLAB函数向相机标定的内参和畸变参数保存为opencv可以读取的XML文件。
function WriteXML(cameraParams,imgNum,file)
%writeXML(cameraParams,file)
%功能:将相机校正的参数(包括内参,外参,畸变参数)保存为xml文件
%输入:
%@cameraParams:相机校正数据结构
%@imgNum:所需要获取外参的图片序号
%@file:xml文件名
%说明在xml文件是由一层层的节点组成的。
%首先创建父节点 fatherNode,
%然后创建子节点 childNode=docNode.createElement(childNodeName),
%再将子节点添加到父节点 fatherNode.appendChild(childNode)
docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage'); %创建xml文件对象
docRootNode = docNode.getDocumentElement; %获取根节点
IntrinsicMatrix = (cameraParams.IntrinsicMatrix); %相机内参矩阵
RadialDistortion = cameraParams.RadialDistortion; %相机径向畸变参数向量1*2
%TangentialDistortion =cameraParams.TangentialDistortion; %相机切向畸变向量1*2
Distortion = RadialDistortion(1:2); %构成opencv中的畸变系数向量[k1,k2]忽略p1,p2,k3
RotationMatrice = cameraParams.RotationMatrices(:,:,imgNum);%这里取所需要图片对应的外参旋转矩阵
TranslationVector = cameraParams.TranslationVectors(imgNum:imgNum,1:3);%这里取所需要图片对应的外参平移向量
%1-内参
camera_matrix = docNode.createElement('IntrinsicMatrix'); %创建mat节点
camera_matrix.setAttribute('type_id','Opencv-IntrinsicMatrix'); %设置mat节点属性
rows = docNode.createElement('rows'); %创建行节点
rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %创建文本节点,并作为行的子节点
camera_matrix.appendChild(rows); %将行节点作为mat子节点
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',3)));
camera_matrix.appendChild(cols);
data = docNode.createElement('data');
for i=1:3
for j=1:3
data.appendChild(docNode.createTextNode(sprintf('%.4f ',IntrinsicMatrix(i,j))));
end
%data.appendChild(docNode.createTextNode(sprintf('\n')));
end
camera_matrix.appendChild(data);
docRootNode.appendChild(camera_matrix);
%2-畸变
distortion = docNode.createElement('Distortion');
distortion.setAttribute('type_id','Opencv-Distortion');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',2)));
distortion.appendChild(rows);
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprin
MATLAB相机标定参数导出至XML

本文详细介绍了如何使用MATLAB进行相机标定,并将标定后的内参、外参及畸变参数导出为XML文件,该XML文件格式适用于opencv。文章还特别提到在导出时忽略了径向畸变的第三项k3,只保留了k1和k2。提供的MATLAB函数能够根据指定图片序号导出相应的旋转矩阵和平移向量。最后,给出了生成XML文件的示例代码和生成的XML文件内容,强调了内参矩阵、旋转矩阵和平移向量的转换注意事项。
最低0.47元/天 解锁文章
1000

被折叠的 条评论
为什么被折叠?



