1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 图像分割数据集制作matlab 制作自己的图像语义分割数据集

图像分割数据集制作matlab 制作自己的图像语义分割数据集

时间:2024-04-29 06:54:55

相关推荐

图像分割数据集制作matlab 制作自己的图像语义分割数据集

本文教你如何正确制作自己的图像语义分割数据集。假设我当前目录下有500张图片,命名从1.jpg开始,一直往上递增,我事先已经调整好了图像的大小。

首先下载Labelme工具:/wkentaro/labelme。使用方式见教程。

每张图片都会生成对应的json文件。接下里就是解析json文件。 以第一个样本为例,解析json文件时,在命令行输入以下进行转化:

$labelme_json_to_dataset json/1.json -o parsed/json-1

(上面这一句中:json文件夹是存放json文件的地方,parsed文件夹是存放解析之后文件的地方)。通过刚刚这个命令,你可以在json-1子文件夹里找到5个文件,分别为:img.png/info.yaml/label.png/label_names.txt/label_viz.png。其中label.png和label_names.txt是后面将要用到的。

但是刚刚这条语句只会转化一个json文件,因此需要写一个shell脚本进行批文件处理。在工作目录中写一个shell脚本文件,命名为test.sh,文件里的内容如下:

for ((i=1;i<501;i++));do

labelme_json_to_dataset json/$i.json -o parsed/json-$i

done

接下来需要在命令行里运行:

$sh test.sh

注意,上面的命令可能会报如下的错误:

Syntax error: Bad for loop variable

这个问题的解决方法如下,在命令行输入:

$chmod 777 test.sh

然后在终端运行:

$./test.sh

最后在parsed文件夹下成功生成了500个子文件夹。接下来为标注出来的label.png进行着色。现在需要写一个程序进行批量处理那500张label.png,新建一个python程序,命名为test.py,内容如下:

#-*- coding:utf-8 -*-

import PIL.Image

import numpy as np

from skimage import io,data,color

import matplotlib.pyplot as plt

for i in range(1,501):

img=PIL.Image.open("parsed/json-%i/label.png"%i)

img=np.array(img)

dst=color.label2rgb(img,bg_label=0,bg_color=(0,0,0))#背景的标签为0,颜色为黑色。当你需要分割多个类别时,去skimage查看原函数

io.imsave("transform/dstlabel-%i.png"%i,dst)

最后处理的500张图片保存在transform文件夹下,你可以查看到。但是,事情还没有结束!!!

最后一步,需要把刚刚的24位png图转化为8位png图,必须得转化。这里提供一份Matlab程序:

dirs=dir('C:/Users/xxx/Desktop/testing/transform/*.png');

for n=1:numel(dirs)

strname=strcat('C:/Users/xxx/Desktop/testing/transform/',dirs(n).name);

img=imread(strname);

[x,map]=rgb2ind(img,256);

newname=strcat('C:/Users/xxx/Desktop/testing/output/',dirs(n).name);

imwrite(x,map,newname,'png');

end

最后在output文件夹下,生成最后的图像标签。接着就可以训练了。展示一组原图以及对应的标签:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。