前言

深度学习中无论是什么任务,数据集是必不可少的,我们可以使用公开数据集,但实际情况中由于特定的任务我们可能也不得不手动制作数据集。正好本人最近在一个语义分割任务中涉及自己制作数据集,也就是标注图像,虽然有例如labelme、ITKsnap等软件可以用来标注,但MATLAB也提供了一个非常实用的图像标注工具Image Labeler,可以在APP中找到,可以用来标记矩形感兴趣区域 (ROI) 标签、折线 ROI 标签、像素 ROI 标签和场景标签。语义分割任务中用到的是像素ROI标注功能,因此在本篇博客中记录一下使用的方法,详细的示例可以参考: https://www.mathworks.com/help/vision/ug/get-started-with-the-image-labeler.html.

语义分割

基本概念

个人理解,图像分割是为图像中的每个像素点分配一个标签,表示一个类别。在语义分割中,表示某种属性的所有区域内的像素点往往具有相同的类别,比如常见的分割CT中的肝脏区域,一个街景图像中分割所有的行人。还有一种分割称为实例分割,其实结合面向对象编程从字面意思也可以想到,一个类拥有多个实例,一个街景图像中也有多个行人,实例分割中每个行人的类别都不一样。

标注结果

在图像分类任务中,每一张图像都有一个类别,例如猫、狗等,这是整幅图的标签(label)。我们前面也提到语义分割每个像素点都有一个标签,那么他的标注结果将和原图的像素数量一样多,为此我们可以用一个数字表示一个类别,比如在通常的二类分割(binary segmentation)中,往往把像素点分为前景(foreground)和背景(background),用1表示前景,0表示背景,我们就可以得到和原图尺寸一致的标注图像。比如下面一幅胸部的CT图像,(来源:https://www.chinayikao.com/forum.php?mod=viewthread&tid=34849&extra=page%3D1&page=1),原图和其标注的图像如下,标注的图像像素值仅有0和1,0表示除肺部之外的区域,1表示肺部区域,当然为了清晰的显示出来,我们对标注的图像灰度值进行了拉伸:

我们可以调用MATLAB中的labeloverlay函数,将标注后的图像叠加在原图上显示:

标注过程

其标注的过程如下:

  1. 我们首先在MATLAB APP中找到Image Labeler并打开

    打开之后如下图所示:
  2. 接下来点击ROI Labels下面的Label图标,就会出现这个对话框
    输入你定义的类别,我们分割的是肺部区域,因此输入lung,右侧的下拉菜单中的标注类型选择最后一个,因为我们进行的是像素级别的标注,同时也可以添加一些描述

    设置好之后主界面的左侧就出现了一个关于lung的提示。

    同样,按照这种方式,你可以添加更多的标签,标签的灰度值从1开始,我们刚刚添加的lung就是1,接着添加的话就是2,3…建立好标签之后我们需要加载你需要标注的图像,在Load下面根据需要选择一种加载图像的方式,选择的时候可以任意数量的图像,该APP会全部包含进来,

    图像选择好之后界面为:

    准备工作基本做完。
  3. 下面就是标注的过程,在最上方的LABEL PIXELS工具栏中出现的就是我们的标注工具,你想标注哪一类就点击左侧的标签,图中lung这个标签发黄意味着我们现在标注的是lung这一个类。工具栏里的各个工具如下:

    从左往右依次为多边形标注工具、Smart Polygon Editor(应该就是Grab Cut的原理)、Assisted Freehand(其实就是一个具有自动吸附功能的多边形标注工具),我们常见的笔刷(Brush)和橡皮(Erase),还有一个自动填充(Flood Fill)的工具。最常用到的应该还是多边形标注工具,当然配合其他的工具使用起来更能提升我们的标注体验,以多边形标注工具为例,我们选择了一个多边形之后

    如果放到起始点附近,光标会形成一个圆形,这时点击后就自动闭合构成一个区域,当然,我们可以双击左键自动闭合,闭合后的区域为:

    这时你可以用鼠标拖动某个你不满意的多边形顶点修正,之后按回车键确定,也可以不按回车键,直接标注下一个区域这个区域就会自动确定。如果对当前标注的结果不满意,可以按Ctrl+Z撤销,注意:只能撤销上一次的结果,上上次及之前的结果就不可以了。之后我们可以点击Flood Fill图标把边缘区域添加一下,这个Flood Fill用的其实就是区域生长的原理。也可以使用笔刷和橡皮进行细节的修正,分割好的结果为:
  4. 分割之后我们需要保存分割的结果,可以点击Export Labels将结果导出至文件或者工作区,我们选择导出至文件后出现

    文件夹里就是我们分割的结果,gTruth.mat加载之后是 groundTruth对象,这个文件很有用,当你导出分割结果的时候,你会发现文件夹中的标注文件行为“Label_1.png”、“Label_2.png”这种,和原始图像的文件名称不一样,如何去找他们的对应关系呢?其实,gTruth.DataSource.Source中存储的就是原始的图像路径,这是一个N1的cell数组,每个元素表示一个图像路径,然后gTruth.LabelData.PixelLabelData中存储的就是标注好的文件,同样也是一个N1的cell数组,刚好和上面的原始图像一一对应。通常在后续的处理中,为了避免顺序错乱带来的问题,我们一般都考虑让图像和标注有着相同的文件名而位于不同的文件夹中,我在里面也没找到相应的设置,只能自己动手编程了,其实也不算难,下面我给出一个实现:
%让标注的结果和原始图像有着相同的名字
dataS =  gTruth.DataSource;
dataFiles = dataS.Source;
%新文件夹路径
labeled_data_path = 'newLabels';
for i =  1:numel(dataFiles)[~,name,~] = fileparts(dataFiles{i});dstfilename = [name,'.png'];srcfilename  = ['Label_',num2str(i),'.png'];movefile(fullfile(labeled_data_path,srcfilename),fullfile(labeled_data_path,dstfilename));
end

写到这里,整个标注流程算是完了,但是我在实际使用过程中遇到一个非常现实的问题,比如你得到了其他软件标注的文件,想修改部分标注的结果该怎么办呢?

加载其他软件标注的文件

APP中有一个明显的Import Labels图标,你可以从文件或者工作空间加载标注好的文件,但是只能从文件中加载.mat文件,无法加载整个文件夹,这就有点麻烦了,其实你从上面的内容可以想到,导出的是一个 groundTruth对象,加载的时候也必须是这样一个对象。MATLAB官方给出了一个详细的说明关于如何去创建这样一个对象:
https://www.mathworks.com/help/vision/ref/groundtruth.html.这里结合我的理解说一下,首先对于一个完整的标注流程,必须有三个要素:原始图像,标签的定义和标注的结果,MATLAB中打开上面的gTruth.mat可以发现三个属性

刚好对应那三个要素,你要想在MATLAB中开始一个标注会话,那么你必须要指定这三个要素,你必须创建一个groundTruth对象,这里我们就不使用上面的例子了,如果我们当前路径下的Imgs、Lables分别保存的是一个数据集中的图像和标注结果,有M个文件,那么下面我给出一段代码用于创建这个groundTruth对象:

clc;clear;
%这里的Imgs是指原始的图像文件
dataSource = groundTruthDataSource('Imgs');
%添加标注的定义
ldc = labelDefinitionCreator();
addLabel(ldc,'Target',labelType.PixelLabel);
labelDefs = create(ldc);
%下面的代码,就是将标注文件的路径包含到labelData中
dataFile = cell(length(dataSource.Source),1);
for i = 1:size(dataFile,1)[~,name,~] = fileparts(dataSource.Source{i});dataFile{i} =  fullfile('Labels',[name,'.png']);
end
labelData = table(dataFile,'VariableNames',{'PixelLabelData'});
% labelData = groundTruthDataSource('Labels');
dataSource = groundTruthDataSource(dataSource.Source);
gTruth =  groundTruth(dataSource,labelDefs,labelData);

MATLAB中图像标注工具——Image Labeler的使用方法相关推荐

  1. 深度学习中图像标注工具整理

    在某些特定图像处理任务中,开源数据集往往并不能完全满足要求,需要制定数据集,来完成检测或者分割任务,接下来介绍几款用的比较多的标注工具. 图像检测标注工具 labelImg labelImg支持Win ...

  2. 【AI】dlib中图像标注工具 imglab 详细说明

    一.基本用法 imglab是一个在图像上标注矩形的工具.基本方法 1> 获取图片列表:./imglab -c mydataset.xml /tmp/images,/tmp/images为保存图像 ...

  3. 【Matlab】Image labeler图像标注工具的使用

    记录Matlab 图像标注工具的使用 背景介绍 工具介绍 创建标签类型 图像标注 标注信息导出 导出信息处理 背景介绍 本次主要记录使用Matlab进行图像标注的一个过程,属于图像处理的一个前期工作, ...

  4. 计算机视觉中的图像标注工具总结

    本文来自公众号CV技术指南资源分享系列 创建高质量的数据集是任何机器学习项目的关键部分.在实践中,这通常比实际训练和超参数优化花费的时间更长.因此,选择合适的标注工具至关重要.在这里,我们总结了一些用 ...

  5. 资源 | 深度学习图像标注工具汇总

    作者 | chaibubble 来源 | CSDN 网站 对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限.世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务.但是数据 ...

  6. 深度学习(目标检测。图像分割等)图像标注工具汇总

    深度学习(目标检测.图像分割等)图像标注工具汇总 2018年05月31日 09:21:54 努力努力再努力tq 阅读数:3581 对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上 ...

  7. labelImg图像标注工具的详细使用

    一.Ubuntu16.04下安装labelImg图像标注工具 图像标注软件安装:安装方法 二.labellmg标注软件的使用 1.软件图标的使用 (1)打开需要标记的图片文件夹 (2)修改保存路径(X ...

  8. 图像标注工具labelimg的安装和使用教程

    图像标注工具labelimg的安装和使用教程 一.安装labelimg (1)首先通过Win+R快捷打开windows的"运行"对话框,在对话框中输入cmd进行终端界面. (2)在 ...

  9. 深度学习图像标注工具汇总

    深度学习图像标注工具汇总 原文地址: https://blog.csdn.net/chaipp0607/article/details/79036312 对于监督学习算法而言,数据决定了任务的上限,而 ...

最新文章

  1. php分布式redis实现session共享
  2. 3.10 程序示例--神经网络设计-机器学习笔记-斯坦福吴恩达教授
  3. 学习笔记Hive(八)—— 查询优化
  4. 7年Java后端被淘汰,一路北漂辛酸史。。。
  5. 设定应用程式上的 Badge -- IOS
  6. iOS开发之为什么更新UI都要放在主线程中
  7. python车牌识别系统开源代码_python实现车牌识别的示例代码
  8. SQL Server 环境搭建
  9. 微信服务号开发IOS设备js-sdk认证失败问题总结
  10. 【数据结构06】二叉平衡树(AVL树)
  11. 银行比赛计算机录入技巧,“金手指”、翻打传票、汉字录入……恒丰银行劳动技能竞赛现场高手过招精彩不断...
  12. MDK中编译报错 Error: L6218E: Undefined symbol SystemInit (referred from startup_cmsdk_cm0.o).
  13. ACM-ICPC 2018 沈阳赛区网络预赛 F题 Fantastic Graph
  14. 京东商品历史价格信息API接口-(item_history_price-获取商品历史价格信息API接口),京东API接口
  15. js 树形结构数据 已知某一子节点 一次向上获取所有父节点
  16. 常用的PDF分割压缩软件有哪些?
  17. 模拟退火算法学习笔记
  18. 网络填坑之路(6)ethtool - 命令管理以太网卡
  19. 下划线的作用(python)
  20. mysql 部门名称递归_部门子部门表结构,递归指定部门的所有子部门SQL函数

热门文章

  1. elo匹配算法c语言,匹配算法全面解析:采用国际通用“ELO等级分系统”
  2. 苹果第一台计算机的诞生的,纪念Mac诞生30周年:第一台Mac电脑深度拆解
  3. 苹果 谷歌 微软 三国混战 附地图详解
  4. 真的还有必要学习JAVA多线程吗?
  5. 十三届蓝桥杯基础知识大全
  6. 软技能-代码外的生存指南PDF下载
  7. 数量遗传学 第四章 有限大小的群体和近交
  8. 网络连通性测试ping和tracert命令
  9. ue4 GetPhysicsLinearVelocity 为空
  10. IOS越狱插件开发一(环境配置搭建)