目录
1. 介绍
当目标和背景像素的灰度分布非常不同的时候,可以对整个图像使用全局阈值
在大多数的应用中,图像之间通常存在足够的变化,全局阈值是一种合适的办法。所以,需要一种对图像做阈值估计的算法。为了获取合适的阈值,可以利用直方图进行迭代计算:
算法步骤如下:
- 随机设置一个阈值的初始值 T
- 用 T 分割图像,这将会产生两个像素区域。一个是灰度值 <= T 所有像素组成的子区域 G1,一个是灰度值 >T 所有像素组成的子区域 G2
- 对G1、G2 两个子区域分别计算平均灰度值m1、m2
- 利用m1、m2得到新的阈值:T = (m1 + m2)/ 2
- 重复2-4,直到两个阈值T的差值小于某个预设定的值ΔT为止
当目标和背景之间存在一个非常清晰的波谷的时候,上述的算法很有效,
一般来说,初始的阈值T设定为整幅图像的平均灰度值
2. 代码实现
完整代码:
import cv2
import numpy as np
def global_threshold_processing(x): # x 为传入的图像
hist = cv2.calcHist([x], [0], None, [256], [0, 256]) # 图像的灰度直方图 shape = (256,1)
grayScale = np.arange(256).