首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将.mat注释文件转换为XML文件

将.mat注释文件转换为XML文件
EN

Stack Overflow用户
提问于 2018-12-26 11:51:04
回答 1查看 1.2K关注 0票数 0

我有一些图像,我用MATLAB的imageLabler工具进行了注释。因此,我得到了gtruth.mat文件(它包含所有图像的注释)。

现在,我想使用这些注释来训练一个简单的对象检测器。但是,我使用的对象检测器(dlib对象检测器)只接受XML格式。

是否有可能将该.mat文件转换为XML文件,以便使我的所有注释保持不变,并且能够训练我的自定义对象检测器?如果是的话,我怎样才能做到呢?

EN

回答 1

Stack Overflow用户

发布于 2018-12-26 14:02:58

我首先要说的是,这只是你的问题的部分解决方案,这应该允许你自己解决剩下的问题。

这个问题似乎涉及将groundTruth对象转换为对dlib友好的XML。

首先,我们需要问自己,什么是groundTruth对象?我已经做了一个玩具例子使用图像标记器和一些图像在MATLAB安装文件夹中可用。我得到的是:

代码语言:javascript
复制
gTruth = 
  groundTruth with properties:

          DataSource: [1×1 groundTruthDataSource]
    LabelDefinitions: [6×3 table]
           LabelData: [9×6 table]

>> gTruth.DataSource
ans = 
groundTruthDataSource for an image collection with properties

                      Source: {
                              ' ...\MATLAB\R2018b\help\symbolic\mupad_ref\adaptivemesh-d0e330.png';
                              ' ...\MATLAB\R2018b\help\symbolic\mupad_ref\adaptivemesh-d0e338.png';
                              ' ...\MATLAB\R2018b\help\symbolic\mupad_ref\adaptivemesh-d0e348.png'
                               ... and 6 more
                              }

>> gTruth.LabelDefinitions
ans =
  6×3 table
       Name         Type              Description        
    __________    _________    __________________________
    'Axis1'       Rectangle    ''                        
    'Axis2'       Rectangle    ''                        
    'Axis3'       Rectangle    ''                        
    'Equation'    Scene        'Image shows an equation.'
    'ThreeD'      Scene        'Image shows a 3D chart.' 
    'TwoD'        Scene        'Image shows a 2D chart.' 

>> gTruth.LabelData
ans =
  9×6 table
       Axis1           Axis2           Axis3        Equation    ThreeD    TwoD 
    ____________    ____________    ____________    ________    ______    _____
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    []              []              []               true       false     false
    []              []              []               true       false     false
    []              []              []               true       false     false
    [1×4 double]    [1×4 double]    [1×4 double]     false      true      false
    [1×4 double]    [1×4 double]    []               false      false     true 

(上面包含了3种可用标签中的2种,第3种是像素标签,我决定在这里跳过它。)

现在,对dlib友好的XML是什么样子的?我不太确定,所以我要用这个:

代码语言:javascript
复制
<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type='text/xsl' href='image_metadata_stylesheet.xsl'?>
<dataset>
<name>imglab dataset</name>
<comment>Created by imglab tool.</comment>
<images>
  <image file='rel-path\1.jpg'>
    <box top='26' left='33' width='78' height='73'>
      <label>LabelName</label>
      <part name='1' x='67' y='68'/>
    </box>
  </image>
  ...
<images>
</dataset>

因此,您需要的映射似乎是:

  • 对于每个图像,创建一个<image>节点,其file属性指向gTruth.DataSource.Source{1...n}
  • 在具有Rectangle-type标签的图像中,创建一个<box>节点。
    • 我们在gTruth.LabelData中所拥有的四元素向量需要转换为top='26' left='33' width='78' height='73'
    • 标签的名称将转到<label>节点。

  • (猜测1)具有多个标签的图像将有多个<label>节点。
  • (猜测2)具有Scene-type标签的图像,将不会有一个包含<label><box>节点。
  • 不知道<part>节点是干什么用的。

在上述基础上创建一个转换器应该是很简单的。您可以使用struct2xml来帮助您和/或xmlwrite

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53931713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档