当我们制作自己的图像分割数据集时,一般都需要对数据集进行像素级标注,生成mask(对应原图像的每个像素的类别图,一般为灰度图),常用工具为labelme,安装很简单,anaconda下安装为以下四个语句:
conda create --name=labelme python=3.7
conda activate labelme
conda install pyqt
pip install labelme
参考链接:https://blog.csdn.net/qq_21466543/article/details/80693955
对所有数据集用labelme标注好保存后,会在原图的路径下自动生成:原图片名称.json文件。为了由json文件生成分割的mask标签,我们此刻需要使用labelme的labelme_json_to_dataset命令将json文件转换为mask(安装好labelme后,可以直接在终端输入labelme_json_to_dataset C:\Users\Administrator\Desktop\tumor_seg\quick_val\010.json(后面是json文件的绝对路径)),但此命令只能一次转化一个json文件,为了能批量转换,需要改进json_to_dataset.py文件,然后使用json_to_dataset.py文件去批量转换json文件。我的json_to_dataset.py的位置在D:\Anaconda3\envs\labelme\Lib\site-packages\labelme\cli里面,读者可以参考,修改的时候最好复制了修改,将原文件重命名保留,以防修改错误难以恢复,修改内容参考网址:http://blog.csdn.net/u014513323/article/details/81166997。
注意:此处博主说mask_png中存放的是8位掩码文件存疑,作者运行后生成的mask_png图像几乎为黑色,导入matlab中看到,mask的像素值为1或0,灰度值太低,故考虑增加对比度(二分类直接二值化),但作者将mask中灰度值为1的像素灰度值置为255时,发现mask仍然全黑,后面修改了原博客程序中的第68行为 mask_dst = skimage.color.rgb2gray(lbl) # 将lbl转换为普通8位灰度图 。此时,在matlab中,将生成的mask像素值为1的像素重新赋予255的像素值后,matlab显示此刻mask为二值化的黑白图。所以,原博客代码生成的mask_png实际上为高精度的16位灰度图,255的灰度值相比其65535的最大灰度值仍然很小,所以将其作为8位灰度图二值化时仍然输出全黑的图片。这时有两种方法,其一是上述所提到的更改程序生成普通8位灰度图,其二是使用原程序,但二值化时,将mask中1像素值更改为65535像素值。
参考博客:
https://blog.csdn.net/qq_21466543/article/details/80693955
http://blog.csdn.net/u014513323/article/details/81166997