1. 阈值概念
阈值:根据这个值将整张图像分割成不同的前后背景,在二值化处理中,有固定阈值和自适应阈值两种形式;
两种阈值使用情况区分:
- 当图像质量好,且目标和背景容易区分时,可以使用固定阈值;
- 当图像质量差,且阴影过度,虽然使用大津法和三角形法也可以自己寻找阈值,但整个图像阈值都是相同的,最终分割效果较差;
- 所以如果是将一整个图像分割成几行几列,对每个部分再运用大津法或三角形法,最后再将图像整合,这样每一个部分的阈值就不相同,分割效果也会越好。
2. opencv中的固定阈值二值化threshold()
cpp
double threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
)
3. 阈值类型
大津法和三角形法是两种常用于图像处理中自动确定阈值的方法。
cpp
type 作用
THRESH_BINARY 灰度值高于阈值的为最大,其余为0
THRESH_BINARY_INV 灰度值高于阈值的为0,其余为最大
THRESH_TOZERO 高于阈值的值为0,低于阈值的保留
THRESH_TOZERO_INV 高于阈值的值保留,低于阈值的值为0
THRESH_TRUNC 高于阈值的为阈值,低于阈值的保留
THRESH_OTSU 大津法自动求阈值,可以配合其他阈值使用,适用于双波峰
THRESH_TRIANGLE 三角形法自动求阈值,根据直方图自行计算阈值,最适用于单个波峰,医
学分割细胞等。
4. 大津法原理
一种基于直方图的自适应阈值确定方法,原理是寻找一个阈值,使得根据该阈值将图像分割成前景(目标) 和背景两部分后,目标与背景之间的类间方差最大。类间方差用于衡量目标和背景之间的差异度,方差越大表示目标和背景之间的差异越大,分割效果越好。
- 计算图像的灰度直方图;
- 对每一个可能的阈值,计算目标和背景的像素数目和像素值的平均值;
- 根据当前的阈值t,计算类间方差作为衡量指标:类间方差=目标像素数目*背景像素数目*(目标平均值-背景平均灰度)^2;
- 找到使得雷剑方差最大的阈值作为最终阈值。
5. 三角形法原理
同样是基于直方图的阈值选择方法,基本原理是找到直方图的峰值处对应的阈值,通过将直方图峰值对应的斜率定义为三角形的高,并找到使得该三角形面积最大的阈值作为最终阈值。
- 计算图像的灰度直方图;
- 找到直方图的峰值处,即直方图中像素数目最多的灰度级别;
- 以峰值处对应的灰度级别为基准,向两侧寻找直方图中像素数目小于峰值处像素数目的一半的两个灰度级别作为边界;
- 计算准基灰度级别和两个边界之间的直方图的斜率,斜率定义为三角形的高,在这种情况下,可以将这两个边界之间的距离作为三角形的底部;
- 找到三角形面积最大的斜率对应的阈值作为最终阈值。
6. 自适应阈值处理adaptiveThreshold()
主要功是边缘提取,并且参数C主要来控制边缘的类型和粗细;将blocksize选得大就是二值化,小就是提取边缘。
7. 二值化处理的经验:
- THRESH_BINARY:适用于对比度明显的图像,目标与背景之间有明显的灰度差异;
- THRESH_TRUNC:适用于保留目标灰度信息同时进行部分抑制的情况;
- THRESH_TOZERO:适用于保留亮度较高的区域的细节信息情况;
- THRESH_OTSU:适用于图像的目标与背景之间有明显的灰度分离,但具体阈值不确定的情况;
- THRESH_TRIANGLE:适用于图像目标与背景之间有明显的灰度分离,但具体阈值不确定的情况;
- ADAPTIVE_THRESH_MEAN_C:适用于图像中不同区域具有不同光照条件的情况,有明显噪声或者需要更好的平滑效果;
- ADAPTIVE_THRESH_GAUSSIAN_C:适用于图像中不同区域具有不同光照条件情况,简单是直接,更快的计算速度。