图像阈值
基本概念:图像阈值一般用于图像阈值分割,图像阈值即图像分割的基准,一般对象为灰度图像,基于此可完成图像的二值化。
全局阈值分割
opencv中提供了不同的阈值准则,以python操作opencv为例:
ret, dst = cv2.threshold(src, thresh, maxval, type)
- src:输入图,只能输入单通道图像,通常来说为灰度图
- dst:输出图,一般为二值图像
- thresh:阈值
- maxval:当像素值超过了阈值(或者小于阈值,根据type来决定)所赋予的值
- type:二值化操作的类型,包含以下5种类型:cv2.THRESH_BINARY;cv2.THRESH_BINARY_INV;cv2.THRESH_TRUNC;cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
- cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
- cv2.THRESH_BINARY_INV THRESH_BINARY的反转
- cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
- cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
- cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
另外,type值还有两个选择,为自适应阈值算法,不是固定阈值,此时传入参数thresh不会起作用。
cv2.THRESH_OTSU 使用大津法选择最优的thresh;
cv2.THRESH_TRIANGLE 使用三角法确定thresh;
大津算法(自适应阈值算法)
- 确定最佳阈值,使背景和目标之间的类间方差最大(因为二者差异最大)
μ\muμ为整张图片的灰度均值,μ0\mu_0μ0和μ1\mu_1μ1分别为背景和目标两类的灰度均值,ω0\omega_0ω0和ω1\omega_1ω1分别代表两类的面积,在灰度直方图中即每一类像素的个数占所有像素个数的比例,ω0+ω1=1\omega_0+\omega_1=1ω