像素聚类(Pixel clustering)
K-means
高斯混合模型
均值漂移聚类(Mean shift clustering)
- 假设点是来自底层概率密度函数(probability density function)的样本。
- 根据点的密度计算PDF的峰值
过程
- Region of interest: 感兴趣区域
- Center of mass: 质心
- Mean Shift vector: 均值漂移向量
步骤
- 初始化:选择一个初始位置(通常是数据点中的随机位置或所有数据点的起始位置)作为当前的质心。
- 确定感兴趣区域:在当前质心周围定义一个窗口或半径,包含在这个窗口内的数据点被认为是当前的感兴趣区域。
- 计算新的质心:对于窗口内的所有数据点,计算其质心(或称均值)。这个新的质心位置通常会与当前位置有所不同,并且更接近数据点的真实密度中心。
- 迭代更新:将当前质心移动到新计算出的质心位置,并重复步骤2和3,直到质心的位置不再发生显著变化或变化在某个预定的小阈值内为止。
- Centre a window on that point
- Compute the mean of the data in the search window
- Centre the search window at the new mean location
- Repeat (3,c4) until convergence
- Free parameters: Kernel (commonly Gaussian), bandwidth
算法
核心:找到数据的密度中心。
- 核函数(Kernel Function):比如可以使用高斯核。这个函数 g(x) 被用来赋予权重,使得距离质心较近的点具有更大的权重。
- 漂移向量 m(x) 的计算:
- 分子部分:对于每一个数据点 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i x_i </math>xi,它与当前质心 x 之间的差异被乘以其对应的权重(通过核函数)。
- 分母部分:这是所有的数据点的权重总和。
- 结果:分子和分母的比值给出的了新的均值位置。这个位置反映了当前质心周围的数据点密度的中心。
- 核窗口的更新:核窗口(或称为"核心")会根据计算出的均值漂移向量 m(x) 进行移动。这个向量决定了核窗口应该如何移动以接近真正的数据密度中心。
均值偏移分割(Mean shift segmentation)
在空间+色彩中聚类,例如:(x,y,R,G,B) 或 (x,y,L,A,B) 坐标。
通过均值漂移算法,我们可以对颜色和空间上的特征进行聚类,从而实现图像的分割。
- 带宽的影响:当增加带宽时,图像的分割区域变得更加粗糙和简化。反之,较小的带宽会导致更细致的分割。
- 空间与颜色的权重:图片从左到右展示了空间带宽的增加,从上到下则是颜色带宽的增加。这展示了当增加空间或颜色的权重时,对应的特性在分割中的重要性会增加。
- 具体变化:
- 在空间带宽较小,颜色带宽也较小的情况下,我们可以看到相对细致的分割,每个物体的边缘都被清晰地分割出来。
- 当空间带宽逐渐增加时,相近的物体开始融合为一个大的区域,如绿色的蔬菜和篮子中的其他食物。
- 当颜色带宽增加时,颜色相近的物体被归为一个区域,不论它们在空间中的距离如何。
小结
-
像素聚类是图像分割的一种快速、简单的方法。
-
示例:在颜色+空间域中的均值漂移聚类。
- 自动发现聚类的数量;无需选择k值。
- 但是需要选择带宽。
-
像素聚类分离颜色区域 - 这些区域可能不对应于实际的物体。
超像素分割(Superpixel segmentation)
超像素(Superpixel)
- 过度分割(Oversegmentation) 方法将图像分割成比物体小的区域。
- 物体和背景被分离。
- 但物体也会被分割成许多部分
- 超像素 = 具有相似特征(例如,颜色)的相邻像素的组合。
SLIC 超像素算法
在非边缘像素上初始化簇中心:
- 通过在规则网格中采样图像, 初始化 k 个簇中心 <math xmlns="http://www.w3.org/1998/Math/MathML"> c k = [ x k , y k , l k , a k , b k ] c_k = [x_k, y_k, l_k, a_k, b_k] </math>ck=[xk,yk,lk,ak,bk]
- 对于每个中心 <math xmlns="http://www.w3.org/1998/Math/MathML"> c k c_k </math>ck, 检查 <math xmlns="http://www.w3.org/1998/Math/MathML"> c k c_k </math>ck周围的 N x N 邻域, 找到梯度最低的像素。 将 <math xmlns="http://www.w3.org/1998/Math/MathML"> c k c_k </math>ck 设置为此像素的 [x, y, l, a, b]。
对于每一个簇中心 <math xmlns="http://www.w3.org/1998/Math/MathML"> c k c_k </math>ck:
- 在ck周围的2M x 2M正方形邻域内,测量像素与ck的相似性。
- 将相似度低于某个阈值的像素分配给簇k。
- 计算新的簇中心ck。
重复此过程,直到簇中心的平均变化(L1距离)低于某个阈值。
相似性度量公式为:
相似性度量不保证簇会是连续的像素。为了强制实现连通性,与主簇不连通的像素将被重新分配到最近的相邻簇。
应用
超像素是多功能的中间图像表示方式。
对于时间复杂度高的算法,它提供了更为紧凑的表示(从600x800像素变为200个超像素)。
常见应用:物体分割。
- 对图像进行过度分割。
- 组合超像素以找到物体。
合并(merging)
区域邻接图(RAG)- Region Adjacency Graph
-
顶点(Vertices) = 图像区域(像素或超像素)。
-
边的权重(Edge weights) = 区域之间的差异。
要合并超像素:
-
识别低于阈值的边,并将这些边连接的超像素重新标记为一个区域。
-
或者迭代地:
- 找到权重最低的边,将连接的超像素重新标记为一个区域。
- 重新计算RAG,重复此过程,直到满足某个条件(例如,所有的边都超过一个阈值)。
小结
超像素 = 通过过度分割产生的相似像素区域。
计算超像素的各种算法,SLIC是一个常见的选择。
超像素是一种紧凑的中间表示,用作以下操作的第一步:
- 分割(尤其是基于图的方法)
- 对象检测/定位
- 视频跟踪。
基于图的分割(Graph-based segmentation)
将图像表示为一个图 G = (V,E)
- 顶点 = 图像区域(像素或超像素)
- 边的权重 = 区域之间的相似性
图割(Graph cuts)
将图像视为一个完全连接(fully-connected)的图。将图分为不相交的集合A和B,目的是最大化总的边缘权重,即移除不相似区域之间的低权重边。
最小化切割的值:
为什么传统的图割方法对与图像风格不理想?
红色虚线表示可能的图割,将图划分为两个部分。这样的图割方法倾向于创建小 的,孤立(isolated) 的集合,这在图像风格中不是理想的情况。因为我们通常希望得到连续 ,有意义的区域,而不是零星,孤立的片段。
节点之间的距离越近,边的权重越大
标准化切割(Normalised cuts)
不是最小化切割值,而是将切割值作为整个图中所有边连接的分数来最小化(标准化切割)。
Instead of minimizing cut value, minimize cut value as a fraction of total edge connections in entire graph (normalised cut)
结果
GrabCut
将图像像素分为两个类别:前景(对象)和背景。
使用颜色聚类(colour clustering) + 图切割(graph cuts)来找到将像素分类到每个类别的最佳方法。
算法
需要用户用一个边界框来初始化算法。
- 框外的像素 = 背景
- 框内的像素 = 前景(foreground)
对于每个类别(前景、背景),使用高斯混合模型(GMM) 表示像素颜色的分布。 将图像像素表示为一个图(8向连接性 8-way connectivity)。
使用G表示像素图,使用θ表示高斯混合模型(GMM)。 α代表每个像素的标签(前景或背景)。
迭代直到收敛:
- 找到图切割(标签分配)以最小化
U -> GMM中簇分配的负对数似然
V -> 颜色相似性的平滑惩罚,应用于α中标签不同的相邻像素
γ -> 权重参数。
- 为新的标签分配重新计算GMM。
结果
- 能量 E 表示目标函数(objective function),代表图像分割质量。目标是找到一个最佳的图像分割,使得这个能量函数最小化。
- 有关于GMM,我们可以看到红蓝的分布变得可分离
小结
- 基于图的方法将图像表示为一个图(由像素或超像素组成)
- 分割去除边缘,将图分解为子图,通常试图优化以下方面:
- 连接区域内的相似性(Similarity)
- 断开的区域之间的差异性(Dissimilarity)
- 连接区域的平滑性(Smoothness)/ 连通性(connectivity)
- 标准化切割 - 分割成多个区域
- GrabCut - 分割成前景/背景
小结
有多种方法可以进行图像分割,但许多方法都使用像素聚类(pixel clustering) 和图分析(graph analysis) 的某种组合。到目前为止讨论的方法进行分割,但不进行语义分割(没有标签的区域)。
如何获取标签?
- 未标记的区域可以输入到对象分类方法中