图像处理之二值化

图像处理之二值化

二值化方式

二值化方式分为五种:
THRESH_BINARY:将大于某一个阈值的变成最大值,其他为0
THRESH_BINARY_INV:和THRESH_BINARY恰好相反
THRESH_TRUNC: trunc就是截断的意思, 将大于某一阈值的像素直接设置为阈值大小,其他不变
THRESH_TOZERO:和trunc相反,在暗色部分截断,小于某一阈值就设置为0,其他不变
THRESH_TOZERO_INV:和tozero相反,大于阈值设置为0,其他不变

方式 公式 处理后 原始图
THRESH_BINARY 图像处理之二值化 图像处理之二值化 图像处理之二值化
THRESH_BINARY_INV 图像处理之二值化 图像处理之二值化 图像处理之二值化
THRESH_TRUNC 图像处理之二值化 图像处理之二值化 图像处理之二值化
THRESH_TOZERO 图像处理之二值化 图像处理之二值化 图像处理之二值化
THRESH_TOZERO_INV 图像处理之二值化 图像处理之二值化 图像处理之二值化

二值化算法

二值化算法分为普通二值化,自适应二值化,OTSU二值化(注意:二值化输入只能是灰度图

普通二值化

#low: 阈值
#high: 最大值
ret, binay = cv2.threshold(img,  low, higher, cv2.THRESH_BINARY)

自适应二值化
自适应二值化的阈值不是自己设定的而是算出来的,算的方法有平均值法,和高斯平均法
平均值法:取一个窗口的平均值作为阈值
高斯平均法:按高斯分布对窗口内的像素取加权和

#ADAPTIVE_MEAN_C: 自适应方法
#255 : 最大值
#11: 窗口大小
#2 :常数
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_MEAN_C, cv2.THRESHOLD_BINARY, 11, 2)

OTSU二值化
OTSU又称最大类间方差法,顾名思义就是找到一个阈值使得大于该阈值和小于该阈值的两部分像素的方差和最大,目的是为了去掉尽可能多的信息,只保留最基本的信息。
图像处理之二值化
对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。 假设图像的背景较暗,并且图像的大小为M×N, 图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:
      ω0=N0/ M×N (1)
      ω1=N1/ M×N (2)
      N0+N1=M×N (3)
      ω0+ω1=1 (4)
      μ=ω0μ0+ω1μ1 (5)
      g=ω0(μ0-μ)2+ω1(μ1-μ)2 (6)
将式(5)代入式(6),得到等价公式: g=ω0ω1(μ0-μ1)^2 (7)
采用遍历的方法得到使类间方差最大的阈值T,即为所求。

ret, binay = cv2.threshold(img,  low, higher, cv2.THRESH_BINARY|cv2.THRESH_OTSU)
上一篇:x264源码分析-scenecut


下一篇:opencv图像二值化操作