图像分割

在计算机视觉领域，图像分割（segmentation）指的是将数字图像细分为多个图像子区域（像素的集合）（也被称作超像素）的过程。图像分割的目的是简化或改变图像的表示形式，使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界（线，曲线等）。更精确的，图像分割是对图像中的每个像素加标签的一个过程，这一过程使得具有相同标签的像素具有某种共同视觉特性。

图像分割的结果是图像上子区域的集合（这些子区域的全体覆盖了整个图像），或是从图像中提取的轮廓线的集合（例如边缘检测）。一个子区域中的每个像素在某种特性的度量下或是由计算得出的特性都是相似的，例如颜色、亮度、纹理。邻接区域在某种特性的度量下有很大的不同。

分割操作也可以利用像素的全局和局部特性来完成。全局特性是通过多个像素的均值和物体的连续边缘来计算，而局部特性则由连续像素和图像边界的相互作用来表征。通过改进的加权函数来适应局部项和全局项之间的权重，可以显著提高分割速度。

## 图像分割的应用

图像分割在实际中的应用包括：

- 医学影像，包括:
- 肿瘤和其他病理的定位
- 组织体积的测量
- 计算机引导的手术
- 诊断
- 治疗方案的定制
- 解剖学结构的研究
- 在卫星图像中定位物体（道路、森林等）
- 人脸识别
- 指纹识别
- 交通控制系统
- Brake light detection
- 机器视觉

现已有许多各种用途的图像分割算法。对于图像分割问题没有统一的解决方法，这一技术通常要与相关领域的知识结合起来，这样才能更有效的解决该领域中的图像分割问题。

## 二值化

二值化（thresholding）是最简单的图像分割方法，会根据特定的限幅值（clip-value）将灰度图转换为黑白图，该值也称阈值（threshold）。

该方法的关键在于如何选取阈值。工业上所采用的方法有很多，如大津算法和K-平均算法。

基于像素强度，此方法将图像划分为两部分，即像素值低于阈值和像素值高于阈值。在许多应用中，彩色图像分割需要多阶段阈值法。为了分割红、绿和蓝色分量，可能需要多个最佳阈值。未来可能需要更多的阈值，但更多的阈值会降低分割过程的性能。多级阈值分割的主要缺点是执行时间过长。在处理低质量图像时，可能会导致阈值错误预测。改进的Salp Swarm算法可以最小化阈值数量，以确保有效的分割过程。改进的Grasshopper Optimization算法、Metaheuristic算法、Firefly算法和新型基于群体的Bee Foraging算法也被用于优化阈值。

## 聚类法

源图像。

K-均值算法是一种将图像分割成K个聚类的迭代技术。基本算法如下：

- 首先从n个数据对象任意选择 k 个对象作为初始聚类中心。
- 对于所剩下其它对象，则根据它们与这些聚类中心的相似度（距离），分别将它们分配给与其最相似的（聚类中心所代表的）聚类。
- 然后再计算每个所获新聚类的聚类中心（该聚类中所有对象的均值）。
- 重复第2和3步骤，直至收敛（聚类不再发生变化）。

这里，距离指像素与聚类中心之间绝对偏差或偏差的平方。偏差通常用像素颜色、亮度、纹理、位置，或它们的加权组合。K值可以手动选取、随机选取、或其它方式得到。此算法保证收敛，但它可能不会返回最佳的解决方案。该解决方案的质量取决于最初的一组集群和K值。

## 直方图法

相对于其他的图像分割算法来说，基于直方图的方法是一种效率非常高的方法，因为通常来说，该方法只需要对整幅图片扫描一遍即可。该方法对于整幅图像建立一张直方图，并通过图中的峰和谷来进行分类。颜色与灰度是通常进行直方图统计的特征。

## 边缘检测

边缘检测主要是图像的灰度变化的度量、监测和定位，其实质就是提取图像中不连续部分的特征。边缘检测在图像处理中比较重要，边缘检测的结果是图像分割技术所依赖的重要特征，因此边缘检测是图像分割领域的一部分。边缘检测常用于计算机视觉、武器跟踪控制及自控制式的车船运动研究等领域。

首先介绍图像边缘检测，具体就梯度算子、kirsch算子、laplacian-gauss算子、canny算子、log滤波算子、sobel算子、Robert算子、prewitt算子边缘检测方法介绍检测原理并通过编程实现，比较各种方法的处理结果。

## 区域生长

区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点，然后将种子像素周围邻域中与种子像素具有相同或相似性质的像素（根据某种事先确定的生长或相似准则来判定）合并到种子像素所在的区域中。将这些新像素当做新的种子像素继续进行上面的过程，直到再没有满足条件的像素可被包括进来，这样，一个区域就长成了。

## 水平集方法

水平集方法最初由Osher和Sethian提出，目的是用于界面追踪。在90年代末期被广泛应用在各种图像领域。这一方法能够在隐式有效的应对曲线/曲面演化问题。基本思想是用一个符号函数表示演化中的轮廓（曲线或曲面），其中符号函数的零水平面对应于实际的轮廓。这样对应于轮廓运动方程，可以容易的导出隐式曲线/曲面的相似曲线流，当应用在零水平面上将会反映轮廓自身的演化。水平集方法具有许多优点：它是隐式的，参数自由的，提供了一种估计演化中的几何性质的直接方法，能够改变拓扑结构并且是本质的。

## 小波变换方法

小波变换常被用来抽取影像的特征，并能应用在去除噪声、边界侦测、辨识等问题，因此也能用来处理图像分割的问题。Andrea Gavlasova在2006年被提出的Wavelet Based Image Segmentation，示范了小波变换用来处理图像分割的流程，整个算法的流程如下：

- 令原影像的大小为NxN，对影像中每4x4的区域做使用哈尔变换的离散小波转换，以抽取出影像的特征。
- 计算抽取出的特征的energy以及contrast，作为新的特征，计算公式如下:
- $$Energy=\sum_{i,j=1}^N C_{i,j}^2$$
- $$Contrast=\sum_{i,j=1}^N (i-j)^2C_{i,j}$$
- 对上一步所算出的特征矩阵，计算纵轴和横轴像素两两之间的差，借此找出影像中的物体边界，作为初步的分割结果。
- 在初步的分割结果会有瑕疵和杂点，这是因为上一步相减两两像素的结果。为了让结果更平滑，就使用circular averaging filter来过滤分割的结果。
- 将输出取阈值，变成能够代表物体边界的黑白影像，像素值为一的部分即代表物体边界。
- 将黑白的分隔影像骨架化(skeletonize)，让输出能以白色细线来表示要分割的物体边界，完成影像分割。

## 请参阅

- 计算机视觉
- 数据聚类
- 图论
- 直方图
- 基于图像的网格
- K-均值算法
- Pulse-coupled networks
- Range image segmentation
- 区域生长
- 大津算法
- GrabCut

## 外部链接

- Some sample code that performs basic segmentation, by Syed Zainudeen. University Technology of Malaysia.
- Generalized Fast Marching method by Forcadel et al. 2008 for applications in image segmentation.
- Image Processing Research Group An Online Open Image Processing Research Community.
- Segmentation methods in image processing and analysis and Minimizing energy to segment images by Mathworks
- More image segmentation methods with detailed algorithms by Yu-Hsiang Wang (王昱翔), National Taiwan University, Taipei, Taiwan, ROC
- Online demonstration of piecewise linear image segmentation by IPOL Journal