自适应阈值处理与Otsu处理—OpenCV-Python
传统数字图像处理–图像分割–阈值处理类别下自适应阈值处理与Otsu处理的概念和比较
自适应阈值处理
对于色彩均衡的图像来说,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时图像的色彩是不均衡的,如果只用一个阈值,就无法得到清晰有效的阈值分割结果图像。
所以这一节我们介绍自适应阈值处理**(阈值是变化的)。在阈值处理时,自适应阈值处理方式通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用阈值对当前像素进行处理。与普通阈值处理方法相比,自适应阈值处理能够更好地处理明暗差异较大**的图像。
函数原型:
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethold, thresholdType, blickSize, C)
参数:
- dst:自适应阈值处理后的结果图像
- src:原始图像
- maxValue:最大值
- adaptiveMethold:自适应方法
- thresholdType:阈值处理方式,该值只能是cv.THRESH_BINARY,或者cv.THRESH_BINARY_INV
- blockSize:计算像素阈值时,在像素周围的取的临近区域大小,通常取值为3, 5, 7
- C:常量,自适应阈值等于每个像素由参数blocksize所指定邻域的加权平均值减去常量C
自适应阈值处理方法 adaptiveMethold 有两种:
cv2.ADAPTIVE_THRESH_MEAN_C:
邻域所有像素点的权重是一致的
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:
与邻域各个像素点到中心点的距离有关,通过高斯方程得到各个像素点的权重值
dst = cv2.adaptiveThreshold(src_img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 3)
阈值 Otsu 处理
OTSU可以帮我们遍历所有可能的阈值,从而找到最佳的阈值
t, result_img = cv2.threshold(src_image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
- 在普通阈值操作函数cv2.threshold()中,对参数type的类型多传递一个参数cv2.THRESH_OTSU,即可实现Otsu方式的阈值分割
- 必须要把阈值设定为0
- 返回的t是Otsu方法计算得到并使用的最优阈值, 返回值 result_img 是阈值处理后的结果图像