图像二值化的输入是一幅灰度图像,每个像素有一个灰度值,一般用属于[0,1]的浮点数或属于[0,255]的整数来表示,也可以用其他取值范围的数值来表示。图像二值化变换的输出是二值图像,每个像素的取值只能是两个数值中的一个。例如,灰度值属于[0,1]浮点数表示的图像,二值化后的取值一般为{0,1},灰度值属于[0,255]整数表示的图像,二值化后取值一般为{0,255}。
一种最简单的图像二值化方法是按给定的阈值进行二值化。对图像中的每一个像素,按照它的像素值是否大于一个给定的阈值,对输出图像对应位置的像素值赋予不同的值。具体运算可以写成以下公式:
式中x为输入图像上一个像素的取值,thr为给定的阈值,Binary(x)是经过图像二值化变换后输出图像上对应像素的取值。
固定阈值方法需要事先确定阈值,无法完全自动地完成图像处理。除了固定阈值的图像二值化方法,还有全局自适应阈值的图像二值化方法。比如使用整幅输入图像的像素平均值作为阈值进行二值化,或者利用更加复杂的Otsu图像二值化方法。
Otsu方法是以提出者大津展之(Otsu Nobuyuki)命名的一种自适应确定阈值的方法。有时中文直接译为大津方法。这种方法假设图像灰度值包含两个聚类。而分割阈值的选取是要使得分割后的两类灰度值的类内距离最小,或者对应的类间距离最大。
假设图像按阈值分为{0,1}两类,第i类的像素数目的比例为wi,均值为ui。则类间距离最大这个目标可以用以下目标函数表示:
在Otsu方法的实现中,通过遍历每个阈值,计算分割后的目标函数。记录目标函数的最大值以及对应的阈值作为最终的分割阈值。
在遍历过程中,不需要对每个阈值重新计算分类和类内方差。而是通过增量方法更新,这样可以大大提高计算速度。
全局自适应阈值方法在处理曝光不均匀的图像时效果较差,当图像一部分比较亮,另一部分比较暗的情况下,全局方法会丢失局部信息。
另一种较常用的方法是局部阈值方法,即对每个像素计算该像素周围n×n的图像区域的像素均值,作为中心像素分割的阈值。或者也可以使用Otsu方法在小块邻域上确定分割阈值。
但是局部方法需要对每个像素计算阈值,计算量比较大,因此在实时系统中很少采用。