clear
clc
load('L4456_2d.mat');
path = dir('C:\Users\admin\Desktop\ssd_label\positiveInstances\*.png');
a = Lff4456;
col = size(a,2);
for j = 1:col
if find(a(:,j)==0)
idx = find(a(:,j)==0);
a(idx(1),j)=a(idx(1)+1,j);
end
end
num = size(a,1);
for i = 1:num
docNode = com.mathworks.xml.XMLUtils.createDocument('annotation');
docRootNode = docNode.getDocumentElement;
foldrNode = docNode.createElement('folder');
foldrNode.appendChild(docNode.createTextNode(sprintf('images')));
docRootNode.appendChild(foldrNode);
fileNmNode = docNode.createElement('filename');
pathname = path(i);
foldername = pathname.folder;
imagename = pathname.name;
filename_out = strcat(foldername ,'\',imagename);
fileNmNode.appendChild(docNode.createTextNode(imagename));
docRootNode.appendChild(fileNmNode);
pathNode = docNode.createElement('path');
pathNode.appendChild(docNode.createTextNode(filename_out));
docRootNode.appendChild(pathNode);
thisElement = docNode.createElement('source');
docRootNode.appendChild(thisElement);
databaseNode = docNode.createElement('database');
databaseNode.appendChild(docNode.createTextNode(sprintf('Unknown')));
thisElement.appendChild(databaseNode);
sizeNode = docNode.createElement('size');
docRootNode.appendChild(sizeNode);
widthNode = docNode.createElement('width');
widthNode.appendChild(docNode.createTextNode(sprintf('752')));
sizeNode.appendChild(widthNode);
heigthNode = docNode.createElement('height');
heigthNode.appendChild(docNode.createTextNode(sprintf('480')));
sizeNode.appendChild(heigthNode);
depthNode = docNode.createElement('depth');
depthNode.appendChild(docNode.createTextNode(sprintf('1')));
sizeNode.appendChild(depthNode);
segmentedNode = docNode.createElement('segmented');
segmentedNode.appendChild(docNode.createTextNode(sprintf('0')));
docRootNode.appendChild(segmentedNode);
%%取出跟踪的坐标,以坐标为中心选取边长为8的正方形为目标标注数据
b = a(i,:);
b(:,85)=[];
x_b = b(1:2:end);
y_b = b(2:2:end);
rand1 = randi(5-2)*rand(1,1)+2;
rand2 = randi(5-2)*rand(1,1)+2;
rand3 = randi(5-2)*rand(1,1)+2;
rand4 = randi(5-2)*rand(1,1)+2;
for j=1:size(x_b,2)
xmin = round(x_b(:,j)-rand1);
ymin = round(y_b(:,j)-rand2);
xmax = round(x_b(:,j)+rand3);
ymax = round(y_b(:,j)+rand4);
%object节点
objectNode = docNode.createElement('object');
docRootNode.appendChild(objectNode);
%name节点
nameNode = docNode.createElement('name');
nameID = num2str(j);
name_out = strcat('point',nameID);
nameNode.appendChild(docNode.createTextNode(name_out));
objectNode.appendChild(nameNode);
%pose节点
poseNode = docNode.createElement('pose');
poseNode.appendChild(docNode.createTextNode(sprintf('Unspecified')));
objectNode.appendChild(poseNode);
%truncated节点
truncatedNode = docNode.createElement('truncated');
truncatedNode.appendChild(docNode.createTextNode(sprintf('0')));
objectNode.appendChild(truncatedNode);
%difficult节点
difficultNode = docNode.createElement('difficult');
difficultNode.appendChild(docNode.createTextNode(sprintf('0')));
objectNode.appendChild(difficultNode);
%bndbox节点
bndboxNode = docNode.createElement('bndbox');
objectNode.appendChild(bndboxNode);
xminNode = docNode.createElement('xmin');
xmin_out = num2str(xmin);
xminNode.appendChild(docNode.createTextNode(xmin_out));
bndboxNode.appendChild(xminNode);
yminNode = docNode.createElement('ymin');
ymin_out = num2str(ymin);
yminNode.appendChild(docNode.createTextNode(ymin_out));
bndboxNode.appendChild(yminNode);
xmaxNode = docNode.createElement('xmax');
xmax_out = num2str(xmax);
xmaxNode.appendChild(docNode.createTextNode(xmax_out));
bndboxNode.appendChild(xmaxNode);
ymaxNode = docNode.createElement('ymax');
ymax_out = num2str(ymax);
ymaxNode.appendChild(docNode.createTextNode(ymax_out));
bndboxNode.appendChild(ymaxNode);
xmlname = imagename(1:end-4);
xmlFileName = [xmlname,'.xml'];
xmlwrite(xmlFileName,docNode);
end
end
这里用到的数据是人脸mark点的坐标数据,可以转成bndbox数据,如果想把有规律的标注数据转成labelimage工具标注的数据格格式,可以参考这个。https://pan.baidu.com/s/16OUSA4zDo6y1mOssWVbcvA用到的.mat数据,图片数据就不方了,涉及隐私