【问题标题】:Convert .mat annotation file into XML file将 .mat 注释文件转换为 XML 文件
【发布时间】:2023-03-08 11:31:01
【问题描述】:

我有一些图像,我使用 MATLAB 的 imageLabler 工具对其进行了注释。结果,我得到了 gtruth.mat 文件(其中包含所有图像的注释)。

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

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

【问题讨论】:

  • 一般来说.mat文件中的数据是以HDF5格式存储的。所以理论上你可以使用任何可以打开 hdf5 并使用它执行转换的工具。但是,我认为更好的方法是直接在 MATLAB 中处理此文件并导出具有所需架构的 xml。

标签: xml matlab data-annotations dlib export-to-xml


【解决方案1】:

我首先要说的是,这只是您问题的部分解决方案,应该可以让您自己解决其余问题。


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

所以首先我们需要问自己,groundTruth 对象是什么?我使用Image Labeler 和 MATLAB 安装文件夹中的一些图像制作了一个玩具示例。这是我得到的:

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 种是 Pixel Labels,我决定在这里跳过。)

现在,dlib 友好的 XML 是什么样的?我不完全确定,所以我会选择这个:

<?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>

所以你需要的映射似乎是:

  • 为每个图像创建一个&lt;image&gt; 节点,其file 属性指向gTruth.DataSource.Source{1...n}
  • 在具有Rectangle-type 标签的图像中,创建一个&lt;box&gt; 节点。
    • gTruth.LabelData 中的 4 元素向量需要转换为例如top='26' left='33' width='78' height='73'
    • 标签名称转到&lt;label&gt; 节点。
  • (猜测 #1)具有多个标签的图像将具有多个 &lt;label&gt; 节点。
  • (猜想 #2)具有Scene 类型标签的图像将没有包含&lt;label&gt;&lt;box&gt; 节点。
  • 不知道&lt;part&gt; 节点的用途。

根据以上内容创建转换器应该很简单。您可以使用struct2xml 来帮助您,和/或xmlwrite

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多