Я начну с того, что это только частичное решение вашей проблемы, которое должно позволить вам решить остальную часть самостоятельно.
Похожечто этот вопрос касается преобразования 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
(Вышеприведенное содержит 2 из 3 доступных типов меток, третий - Пиксельные метки , которые я решил пропустить здесь.)
Теперь, как выглядит дружественный к XML 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>
Таким образом, вам нужно следующее отображение:
- Для каждого изображения создайте
<image>
узел, чей атрибут file
указывает на gTruth.DataSource.Source{1...n}
. - В изображениях, имеющих метку
Rectangle
-типа, создайте узел <box>
. - Четырехэлементный вектор, который мы имеем в
gTruth.LabelData
, необходимо преобразовать, например, в top='26' left='33' width='78' height='73'
. - Имя метки относится к узлу
<label>
.
- (Угадайте # 1) Изображения, имеющие несколько меток, будут иметь более одного узла
<label>
. - (Угадайте # 2) Изображения, имеющие тип
Scene
метка, не будет иметь <box>
узла, включающего <label>
. - Понятия не имею, для чего предназначен узел
<part>
.
Создание конвертерана основании вышесказанного должно быть просто.Вы можете использовать struct2xml
, чтобы помочь вам, и / или xmlwrite
.