二值化——全局阈值方法
图像二值化(Image Binarization)是指将像素点的灰度值设为0或255,使图像呈现明显的黑白效果。二值化一方面减少了数据维度,另一方面通过排除原图中噪声带来的干扰,可以凸显有效区域的轮廓结构。OCR效果很大程度上取决于该步骤,高质量的二值图像可以显著提升识别的准确率。目前,二值化的方法主要分为全局阈值方法(Global Binarization)、局部阈值方法(Local Binarization)、基于深度学习的方法和其他方法。
固定阈值方法
该方法对输入图像中的所有像素点统一使用同一个固定阈值。其算法如下:
g ( x , y ) = { 255 , 若 f ( x , y ) ≥ T 0 , 否则 g(x,y)=\begin{cases} 255, & 若f(x,y)\geq T \\ 0, & 否则 \end{cases} g(x,y)={
255,0,若f(x,y)≥T否则
- T T T为全局阈值
不同的阈值 T T T会产生不同的二值化效果。对于不同的输入图像,最佳的阈值 T T T也不一样,这也是固定阈值方法的主要缺陷。
于是,解决这一缺陷的相应算法也随之而出现;下面的几种方法均采用了根据输入图像计算最佳阈值的思想。
Otsu算法
Ostu算法1又称最大类间方差法,由日本学者Nobuyuki Ostu于1979年提出,是一种在自适应的阈值确定方法。
Ostu算法将输入图像分为 L L L个灰度级, n i n_i ni表示灰度级为 i i i的像素个数,则像素总数 N = n 1 + n 2 + ⋯ + n L N=n_1+n_2+ \cdots +n_L N=n1+n2+⋯+nL。为了简化讨论,这里使用归一化的灰度直方图,并将其视为输入图像的概率分布:
p i = n i / N , p i > 0 , ∑ i = 1 L p i = 1 p_i=n_i/N, p_i>0, \sum_{i=1}^{L}p_i=1 pi=ni/N,pi>0,i=1∑Lpi=1
现假设在第 k k k个灰度级设置阈值,将图像分为 C 0 C_0 C0和 C 1 C_1 C1(背景和目标物体), C 0 C_0 C0表示灰度级为 [ 1 , ⋯ , k ] [1, \cdots, k] [1,⋯,k]的像素点, C 1 C_1 C1表示灰度级为 [ k + 1 , ⋯ , L ] [k+1, \cdots, L] [k+1,⋯,L]的像素点,那么两类出现的概率以及类内灰度级的均值分别为:
ω 0 = P r ( C 0 ) = ∑ i = 1 k p i = ω ( k ) ω 1 = P r ( C 1 ) = ∑ i = k + 1 L p i = 1 − ω ( k ) μ 0 = ∑ i = 1 k i P r ( i ∣ C 0 ) = ∑ i = 1 k i p i / ω 0 = μ ( k