基础:
图像分割指的是:根据图像所显示的内容标记特定区域,解决“图像里有什么,在什么位置”的问题。
给分割后图像中的每一类物体添加语义标签,用不同的颜色代表不同类别的物体,即形成了图像的语义分割/图像语义标注/密集预测。
应用:无人驾驶(识别云与车),地理信息系统(识别道路与河流)
超像素:在平常图像处理任务中,处理的最小单位是像素,这就是像素级;而把像素级的图像划分成为多个区域,把区域当成是最基本的处理单元,这就是超像素。
图像硬分割:
每个像素都有准确的所属区域,以二分类为例,每个像素的标签非0即1
图像软分割:
每个像素都有一个“隶属度”,表明该像素属于每一类的概率
基于聚类的分割方法:
聚类分割技术按照样本(像素,包含颜色、亮度、纹理等特征)间的相似性把集合(一张图片)划分为若干子集,每个子集相当于一个类别,划分结果使某种表示聚类质量的准则(与损失函数效果相同,不过越大越好)为最大
通用步骤:1、初始化一个粗糙的聚类
2、迭代至收敛,得到最终结果
K-Means:
初始K个聚类中心,将样本按距离分给每个聚类(遍历所有样本)。对每个簇,以簇内所有样本的均值作为该簇新的聚类中心。迭代直到聚类中心不再变化,或达到设定的迭代次数。
优点:可收敛,每次迭代都向全局最优靠近
缺点:每次迭代都遍历所有样本,计算量大。K-means是基于距离的划分方法,不适合的聚类非凸形状的类簇如: 。
谱聚类:
一种基于图论的聚类方法,将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,子图间距离尽量较远,以达到聚类的目的
该算法能在任意形状的样本空间上执行并且收敛于全局最优,对数据的适应性非常广泛 k聚类 谱聚类
均值漂移算法Mean Shift:
在未被分类的数据点中随机选择一个点作为中心点;
以r为半径做圆。圆心和圆内的每个点都构成一个向量。将这些向量进行矢量加法操作,得到Mean Shift 向量;
继续以Mean Shift向量的终点为圆心做圆,得到下一个Mean Shift向量,重复此步骤,直到偏移向量大小满足设定的阈值要求,此时的中心点即为一个类的中心点;
重复以上步骤直到所有的点都被归类;
对每个点的访问频率,取访问频率最大的那个类,作为该点的所属类。
优点:思想与k-means相似,但不需要定义聚类数量,在计算时自然能得到。
缺点:半径r的选择对结果影响很大;速度慢;当分割对象的语义信息较少时效果不理想。
SLIC:
计算完距离之后,每一个像素点都会更新自己所属的图像块,将同一个图像块的像素点取平均,得到新的聚类中心,然后再重复前面的步骤,直到两次聚类中心的距离小于某个阈值。
优点:能生成紧凑、近似均匀,且邻域特征明显的超像素;需要人为设置的超参数少;可对彩色图和灰度图进行分割。
缺点:对边缘的保持使用位置限制,导致超像素和图像边缘的契合度变差。
基于边缘的分割方法
试图通过检测包含不同区域的边缘来解决分割问题。通常不同区域的边界上像素的灰度值变化比较剧烈,如果将图片从空间域通过傅里叶变换到频率域,边缘就对应着高频部分。
边缘检测技术分类:
通用步骤:确定起始边界点
选择搜索策略,并根据一定的机理依次检测新的边界点
设定终止条件,使之停下来
常用的一阶微分算子有: 等
二阶微分算子有: 等
分类效果:
基于区域的分割方法:
将图像按照相似性准则分成不同的区域
阈值分割法:
可以解决将图像分为背景与目标两部分的分割问题
基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值作比较,最后将像素根据比较结果分到合适的类别中。
方法的关键在于得到最佳灰度阈值的方法(ppt第31页给了多种方法)
优点:简单,效率高
缺点:只考虑像素点灰度值本身的特征,一般不考虑空间特征,因此对噪声比较敏感,鲁棒性不高
种子区域生长法:
方法过程:
随机选取图像中的一个像素作为种子像素,记为标签1;
检索种子附近的未被标记的像素点,如果差值在所规定的阈值内,则合并到分割区域中;
重复步骤2,直到区域停止扩张,并在此时再次随机选择非选定区域的一个像素做为种子像素;
重复上述步骤,直到图像中的每个像素均被分配到不同的区域中。
方法的关键在于:1. 确定能正确代表所需区域的种子像素;2. 确定在生长过程中能将相邻像素包括进来的准则;3. 指定让生长过程停止的条件
优点:计算简单,对于较均匀的连通目标有较好的分割效果
缺点:需要人为确定种子点,对噪声敏感。串行算法,速度慢
区域分裂合并法:
区域生长的逆过程。首先将图像任意分成若干互不相交的区域,然后再按照相关准则对这些区域进行分裂或者合并从而完成分割任务。
方法过程(先打碎,再合并):
1. 首先将图像分为若干区域;
2. 同一区域内,若像素特征值不在同一个范围则将该区域一分为四;
3. 重复步骤2,直到所有的子区域都有相似的特征值;
4. 对比相邻的子区域,将相似的区域进行合并,重复上述过程,直到所有子区域均没有相邻的相似区域。
优点:对于复杂图像具有良好的分割效果
缺点:算法复杂,计算量大,分裂过程中可能破坏原本正确划分的区域边界
分水岭法:
本质就是基于边缘的分割方法,将灰度值极值点连线作为区域分隔线
由于噪声或图片本身原因,图像可能被分的过细。
解决方法:高斯平滑;基于图像标记(mark)的分水岭算法。
基于图论的分割方法:
给定一个图G = (V, E),如何把它的顶点集划分为不相交的子集,使得这种划分最好(使能量函数/损失函数最小)。其难点主要有两个:
1. 划分准则(能量函数)难以确定
2. 即使定义了一个相当好的划分准则(聚类准则),如何优化又是一个问题。
最小化分割min-cut:
图中边上的数字是点之间的权重,权重表示点的相似性
Mincut:将图G分成两个不相交子集A、B使得 最小(即:两个子集间的点关联性最小)
毫无疑问算法会将两条权重为0.1的边分割
但对于下图问题min-cut表现不佳:
想要的结果是中间虚线表示的分割,但是最小化切割却切掉了最边缘的角。
因为最小化切割就是让cut(A,B)的值最小的情况,划分的两个集合例,有一个集合只包含边缘处的一个点,无疑可以使cut()函数值最小。
为解决此问题:
归一化切割Normalized Cut:
其中volA的含义是A中所有点到图中做有点的权重的和。
通过上面的公式我们可以很清晰的看到:N-cut在追求不同子集间点的权重最小值的同时也追求同一子集间点的权重最大值
Graph Cuts:
除图像像素外人为额外设置两个终端顶点S和T,每个普通顶点和这2个终端顶点之间都有连接
能量函数:
R(A)表示的是区域数据项,B(A)表示的是边界平滑项。λ常数决定它们对能量的影响大小
算法缺点:只适用于灰度图,需要人工标注终端顶点
基于深度学习的分割方法:
全卷积神经网络:
与经典的卷积神经网络在卷积层之后使用全连接层得到固定长度的特征向量进行分类不同,全卷积神经网络采用反卷积层对最后一个卷积层的特征图进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,同时保留了原始输入图像中的空间信息。
最后在上采样的特征图上进行逐像素分类,从而实现了语义级别的图像分割。
主要操作:
1. 全卷积层
全卷积神经网络将传统CNN中的全连接层替换成一个个的卷积层
2. 上采样层
卷积和池化会降低图片分辨率,使得图片中的像素点不能恢复到原图,给像素级别的训练带来困扰,因此需要对特征图进行上采样(方法如插值法,反卷积等),恢复图像大小。
3. 跳跃层
将不同池化层的结果进行上采样之后融合使结果更加精细
DeepLab模型:
解决两个问题:池化导致丢失信息;没有利用标签之间的概率关系
解决方法:空洞卷积扩大感受野;概率图模型与深度网络结合
ReSega模型:
解决问题:以往没有考虑到局部或者全局的上下文依赖关系,这对语义分割十分重要
解决方法:RNN检索上下文