1 参数选择 径向畸变3个参数还是两个参数
默认两个参数
如果是三个参数
2准备转化生成结果
二参数的转化代码
writeExternalandIntrinsicMatrix(cameraParams62,'cameraParams622.xml');
function writeExternalandIntrinsicMatrix(cameraParams,file) %writeXML(cameraParams,file) docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage'); docRootNode = docNode.getDocumentElement; IntrinsicMatrix = ((cameraParams.IntrinsicMatrix)'); TangentialDistortion =cameraParams.TangentialDistortion; %Distortion = [cameraParams.RadialDistortion(1:2),TangentialDistortion, cameraParams.RadialDistortion(3)]; Distortion = [cameraParams.RadialDistortion(1:2),TangentialDistortion,0]; FocalLength = cameraParams.FocalLength; camera_matrix = docNode.createElement('IntrinsicCam'); %锟斤拷锟斤拷mat锟节碉拷 camera_matrix.setAttribute('type_id','opencv-matrix'); %锟斤拷锟斤拷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); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); camera_matrix.appendChild(dt); data = docNode.createElement('data'); for i=1:3 for j=1:3 data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrix(i,j)))); end data.appendChild(docNode.createTextNode(sprintf('\n'))); end camera_matrix.appendChild(data); docRootNode.appendChild(camera_matrix); distortion = docNode.createElement('DistortionCam'); distortion.setAttribute('type_id','opencv-matrix'); rows = docNode.createElement('rows'); rows.appendChild(docNode.createTextNode(sprintf('%d',1))); distortion.appendChild(rows); cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',5))); distortion.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); distortion.appendChild(dt); data = docNode.createElement('data'); for i=1:5 data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i)))); end distortion.appendChild(data); docRootNode.appendChild(distortion); focalLength = docNode.createElement('FocalLength'); focalLength.setAttribute('type_id','opencv-matrix'); rows = docNode.createElement('rows'); rows.appendChild(docNode.createTextNode(sprintf('%d',1))); focalLength.appendChild(rows); cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',1))); focalLength.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); focalLength.appendChild(dt); data = docNode.createElement('data'); for i=1:1 data.appendChild(docNode.createTextNode(sprintf('%.16f ',FocalLength(i)))); end focalLength.appendChild(data); docRootNode.appendChild(focalLength); % distortion = docNode.createElement('Pmatrix'); % distortion.setAttribute('type_id','opencv-matrix'); % rows = docNode.createElement('rows'); % rows.appendChild(docNode.createTextNode(sprintf('%d',1))); % distortion.appendChild(rows); % % cols = docNode.createElement('cols'); % cols.appendChild(docNode.createTextNode(sprintf('%d',4))); % distortion.appendChild(cols); % % dt = docNode.createElement('dt'); % dt.appendChild(docNode.createTextNode('d')); % distortion.appendChild(dt); % data = docNode.createElement('data'); % for i=1:4 % data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i)))); % end % distortion.appendChild(data); % docRootNode.appendChild(distortion); xmlFileName = file; xmlwrite(xmlFileName,docNode); end
二参数的保存结果
<"1.0" encoding="utf-8"?> <opencv_storage> <IntrinsicCam type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data>1558.5669994681102253 0.0000000000000000 821.5211092415044050 0.0000000000000000 1557.8077127262038175 460.9748043702705331 0.0000000000000000 0.0000000000000000 1.0000000000000000 </data> </IntrinsicCam> <DistortionCam type_id="opencv-matrix"> <rows>1</rows> <cols>5</cols> <dt>d</dt> <data>-0.1873006682834817 0.0171597428423078 0.0000000000000000 0.0000000000000000 0.0000000000000000 </data> </DistortionCam> <FocalLength type_id="opencv-matrix"> <rows>1</rows> <cols>1</cols> <dt>d</dt> <data>1558.5669994681102253 </data> </FocalLength> </opencv_storage>
三参数的转化代码
function writeXML(cameraParams,file) %writeXML(cameraParams,file) %功能:将相机校正的参数保存为xml文件 %输入: %cameraParams:相机校正数据结构 %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*3 TangentialDistortion =cameraParams.TangentialDistortion; %相机切向畸变向量1*2 Distortion = [RadialDistortion(1:2),TangentialDistortion,RadialDistortion(3)]; %构成opencv中的畸变系数向量[k1,k2,p1,p2,k3] camera_matrix = docNode.createElement('camera-matrix'); %创建mat节点 camera_matrix.setAttribute('type_id','opencv-matrix'); %设置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); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); camera_matrix.appendChild(dt); data = docNode.createElement('data'); for i=1:3 for j=1:3 data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrix(i,j)))); end data.appendChild(docNode.createTextNode(sprintf('\n'))); end camera_matrix.appendChild(data); docRootNode.appendChild(camera_matrix); distortion = docNode.createElement('distortion'); distortion.setAttribute('type_id','opencv-matrix'); rows = docNode.createElement('rows'); rows.appendChild(docNode.createTextNode(sprintf('%d',5))); distortion.appendChild(rows); cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',1))); distortion.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); distortion.appendChild(dt); data = docNode.createElement('data'); for i=1:5 data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i)))); end distortion.appendChild(data); docRootNode.appendChild(distortion); xmlFileName = file; xmlwrite(xmlFileName,docNode); end
三参数的转化保存结果
<"1.0" encoding="utf-8"?> <opencv_storage> <camera-matrix type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data>1558.6100144620272658 0.0000000000000000 821.6453269280840459 0.0000000000000000 1557.8120286433929778 460.8682816753835141 0.0000000000000000 0.0000000000000000 1.0000000000000000 </data> </camera-matrix> <distortion type_id="opencv-matrix"> <rows>5</rows> <cols>1</cols> <dt>d</dt> <data>-0.1840928673709393 -0.0328189923757994 0.0000000000000000 0.0000000000000000 0.2205440258401062 </data> </distortion> </opencv_storage>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无争山庄资源网 Copyright www.whwtcm.com
暂无“如何基于matlab相机标定导出xml文件”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月16日
2024年11月16日
- 群星《歌手2024 第13期》[FLAC/分轨][325.93MB]
- 阿木乃《爱情买卖》DTS-ES【NRG镜像】
- 江蕾《爱是这样甜》DTS-WAV
- VA-Hair(OriginalBroadwayCastRecording)(1968)(PBTHAL24-96FLAC)
- 博主分享《美末2RE》PS5 Pro运行画面 玩家仍不买账
- 《双城之战2》超多新歌MV发布:林肯公园再次献声
- 群星《说唱梦工厂 第11期》[320K/MP3][63.25MB]
- 群星《说唱梦工厂 第11期》[FLAC/分轨][343.07MB]
- 群星《闪光的夏天 第5期》[320K/MP3][79.35MB]
- 秀兰玛雅.1999-友情人【大旗】【WAV+CUE】
- 小米.2020-我想在城市里当一个乡下人【滚石】【FLAC分轨】
- 齐豫.2003-THE.UNHEARD.OF.CHYI.3CD【苏活音乐】【WAV+CUE】
- 黄乙玲1986-讲什么山盟海誓[日本东芝版][WAV+CUE]
- 曾庆瑜1991-柔情陷阱[台湾派森东芝版][WAV+CUE]
- 陈建江《享受男声》DTS-ES6.1【WAV】