直方图与阈值分割

直方图与阈值分割

  1. 直方图的基本概念
  2. 大津算法的基本思想及实现
  3. 区域生长法的基本思想及实现步骤

一、灰度直方图

以灰度为横坐标,每一个灰度值在图像中出现的次数作为纵坐标

灰度直方图描述了图像中灰度的分布情况

直方图与阈值分割_第1张图片

通过灰度直方图看到图像的照明效果

直方图与阈值分割_第2张图片

二、灰度阈值分割

假设:图像中的目标区和背景区之间或者不同目标区之间,存在不同的灰度或平均灰度
凡是灰度值包含于z的像素都变成某一灰度值,其他的变成另一个灰度值,则该图像就以z为界被分成两个区域
直方图与阈值分割_第3张图片
如果=1和=0,分割后的图像为二值图像
直方图与阈值分割_第4张图片
确定最佳阈值,使背景和目标之间的差异最大

大津算法

确定最佳阈值,使背景和目标之间的类间方差最大 (因为二者差异最大)
直方图与阈值分割_第5张图片直方图与阈值分割_第6张图片
算法实现:遍历灰度取值
直方图与阈值分割_第7张图片

大津算法局限性

直方图与阈值分割_第8张图片

区域生长法分割

从种子点开始,按照一定准则(如相邻像素灰度相似性)向周围扩散,将邻域相似像素加入区域中
直方图与阈值分割_第9张图片

区域生长实现步骤:

  1. 对图像顺序扫描!找到第1个还没有归属的像素, 设该像素为(x0, y0);
  2. 以(x0, y0)为中心, 考虑(x0, y0)的8邻域像素(x, y),如果(x, y)满足生长准则, 将(x, y)与 (x0, y0)合并, 同时将(x, y)压入堆栈;
  3. 从堆栈中取出一个像素, 把它当作(x0, y0)返回到步骤2;
  4. 当堆栈为空时,返回到步骤1;
  5. 重复步骤1 - 4直到图像中的每个点都有归属时。生长结束。

大津算法与区域生长方法结果比较

直方图与阈值分割_第10张图片

实现

计算灰度直方图

dst = cv.ca
lcHist( images, channels, mask, histSize, ranges[, hist[, accumulate]] )

大津算法那计算阈值

retval, dst = cv.threshold( src, thresh, maxval, type[, dst] )

漫水填充(区域生长法)

retval, image, mask, rect = cv.floodFill( image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]] )

总结

  1. 灰度直方图是图像中灰度分布统计图
  2. 大津算法是最常用的一类灰度阈值自动选取方式,目标是令类间方差最大(使用最广泛)
  3. 区域生长法是另一类有效的分割方法,其核心在于利用相邻像素间的相似性(光照复杂、形状复杂)

你可能感兴趣的:(图像分割)