本文列出传统图像分割的主要方法,并针对目标图像进行可行性分析。

基于阈值的分割

基于图像灰度图的特征划分图像,其核心是找出最优灰度阈值。主要有固定阈值和自适应阈值两种阈值选择方法。

固定阈值

固定阈值法使用某一固定像素值作为分割点。

直方图双峰法

直方图双峰法是一种全局单阈值分割方法。如果图像有明显的目标和背景,则其灰度直方图会呈双峰分布,那么可选取双峰之间的波谷对应的灰度值作为阈值。

迭代法

迭代法是对双峰法的改进,基于逼近的思想。

  1. 设置初始阈值T0为图像最大灰度值和最小灰度值的平均。
  2. 根据阈值T将图像分割为前景和背景,分别求出二者的平均灰度值ZO和ZB
  3. 设置新阈值T为ZO和ZB的平均
  4. 若T不再变化或变化小于一个预定义的值时,则T即为最终阈值,否则跳转2计算。

因目标图片噪点较多,且不同区域的亮度不一,所以无法准确地分割前景和背景。另外目标图片的灰度直方图基本为单峰,所以不适用于固定阈值。

自适应阈值

根据图像的局部特征分别采用不同的阈值进行分割。将图像分为几个区域,分别选择阈值,或动态地根据一定邻域范围选择每点处的阈值,从而进行图像分割。

大津法

按照图像的灰度特性,将图像分为背景和目标两部分。背景和目标之间的类间方差越大,说明构成图像两部分的差别越大。因此,使类间方差最大的分割意味着错分概率最小。本方法对于非双峰图像的效果不明显。

均值/高斯

OpenCV给出了两种自适应方法,一种方法阈值取自相邻区域的平均值,另一种方法阈值取自相邻区域的加权和,权重为一个高斯窗口。针对目标图片,两种方法能够大体描绘出目标边缘,后一种方法能够排除更多的噪点。

基于区域的分割

区域生长

区域生长算法的基本思想是将有相似性质的像素点合并到一起。从某个或者某些像素点出发,最后得到整个区域,进而实现目标提取。这种方法的缺点是需要人为确定种子点,对噪声敏感,并且当目标较大时,分割速度较慢。此方法的效果略逊于自适应阈值法,参数对目标图像集的泛化程度不明。

区域分裂合并

区域分裂合并基本上是区域生长的逆过程:从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,实现目标提取,无需预先指定种子点。暂未找到合适的实现代码。

分水岭算法

一种基于拓扑理论的数学形态学的分割方法。本算法可与下文提及的斑点检测方法结合。

基于边缘的分割

检测边缘处的特征点,从而分割图像。基础算法有Canny边缘检测、Harris角点检测、SIFT检测等。

圆形检测

运用霍夫变换检测图像中的圆形,需要人工规定检测到的圆形大小。此方法在目标图像使用的效果较好,但因霍夫变换对圆形大小十分敏感,所以对其参数的泛化能力存疑。另外有少量非目标区域被识别为圆形,应为目标图像的结构所致。

斑点检测

斑点通常是指与周围有着颜色和灰度差别的区域。目标图像比较符合圆形斑点的特征,检测条件较圆形检测严格。本方法实际效果略优于圆形检测。

OpenCV中的斑点检测算法SimpleBlobDetector即是基于局部极值的分水岭算法。

总结

当前可行的图像分割方法,效果由高至低:

  1. 斑点检测
  2. 圆形检测
  3. 自适应阈值法
  4. 区域生长