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