作者:王晶,梁爽
浏览下图,我们能得到什么呢?
我们不到一秒钟就能发现其中有一只猫、一条狗和一个人的腿。但对于机器,这种学习过程很复杂。机器需要解析图像和检测对象等,包括特征提取,特征分类等等。
本文主要讲述机器如何进行图像分割。
什么是图像分割
图像分割技术在各个领域都有着巨大的影响。
以上为一张癌细胞图,我们可以清晰地看到每个癌细胞的形状和细节,尽早地检测出癌细胞可以挽救数百万人的生命。同时,图像分割技术正在改变着许多其他应用行业,像交通控制系统、自驾系统、卫星图像定位等。
以下是几种图像分割技术总结:
算法 |
描述 |
优点 |
缺点 |
基于区域细分 |
根据某个阈值将对象分成不同的区域 |
计算简单、运算速度快、适用于对象和背景具有高对比度的图像 |
当灰度差异不明显或灰度像素值重叠时,较难使用。 |
边缘检测分割 |
利用图像的不连续局部特征来检测边缘,从而定义对象的边界。 |
适用于物体间具有较好对比度的图像 |
不适用于图像边缘过多,且对象间对比度小的图像 |
基于聚类细分 |
将图像的像素分为均匀的簇 |
在小数据集上非常有效,且可生成出色聚类。 |
计算时间较长,不适用于群集非凸群集。 |
Mask R-CNN |
为图像中的每个对象提供三个输出:类,边界框坐标和对象蒙版 |
简单、灵活 |
训练时间长 |
1. 基于区域
如果要将图像分为两个区域(对象和背景),则定义一个阈值,这称为全局阈值。我们通过一个实例来理解这类算法。
首先,我们导入所需的库。
上图一个三通道图像(RGB),首先我们需要将其转换为灰度图像,使其只有一个通道,这样做也能帮助我们更好地了解算法的工作原理。
现在,我们要对该图像应用某个阈值。此阈值应将图像分为两部分-前景和背景。
我们将像素值的平均值用作阈值。如果像素值大于阈值,则可以说它属于对象,若小于阈值,它将被视为背景。
较暗的区域(黑色)代表背景,而较亮的(白色)区域代表前景。我们还可以定义多个阈值以检测多个对象:
通过设置多个阈值,将上图分割为四个不同的部分。
2 . 边缘检测分割
边缘可被视为图像的不连续局部特征,我们可以利用这种不连续性来检测边缘,从而定义对象的边界。这有助于我们检测给定图像中存在的多个对象的形状。现在的问题是如何检测这些边缘?这时我们用到了过滤器和卷积。
工作步骤:
- 取权重矩阵
- 将其放在图像上方
- 执行逐元素乘法并获得输出
- 根据所选步幅移动权重矩阵
- 进行卷积直到使用完输入的所有像素
接下来,通过一个实例来理解它。首先,寻找一张具有明显边缘界限的图像,如下图。
然后,在Python中定义此过滤器,并将其卷积在上图中。
接下来,对过滤器进行卷积并打印输出如下。
我们可以明显看到,上述方法已检测到水平和垂直边缘。
3 . 基于聚类的图像分割
k-means是最常用的聚类算法之一 。在此,k表示簇的数量。
工作原理:
- 首先,随机选择k个初始聚类
- 将每个数据点随机分配给k个群集中的任何一个
- 计算这些聚类的中心
- 计算所有点到每个群集中心的距离
- 根据此距离,将点重新分配到最近的聚类
- 计算新形成的集群的中心
- 最后,重复步骤(4),(5)和(6),直到聚类中心不变或达到设定的迭代次数
下面,我们通过一个例子来具体的了解它。
首先,我们将上图转换为形状为(长*宽,通道)的二维数组,即将(192 * 263,3)转换为(50496,3)。接下来,将k-means算法拟合到此重构数组上并获得聚类。
本文选择了5个集群,让我们将聚类恢复到原始形状(即3维图像)并绘制结果。
4 . Mask R-CNN
该架构可以为图像中的每个对象创建像素级掩模。请看下面的图片,直观了解Mask R-CNN在内部的工作原理。
结语
本文只是简略地介绍了图像分割的技术,更加深刻的图像分割知识还需要读者们继续探寻。
作者:王晶,梁爽
指导老师:沈浩
本文来源: 数艺学苑