引言
在进行图像的预处理的过程中,为了尽可能多的减少无用像素,保留关键像素。常会使用二值化的方式“剥离”无用像素,使得图像仅保留“物象”与“背景”。图像的二值化,即设定一个灰度阈值,将低于和高于该阈值的像素分别设置为像素值的两个极端值。不难推断,阈值的选取,对于二值化的效果至关重要。那么我们该如何合适的阈值呢?
一、何为“合适”的阈值?
通常,二值化的目的,是为让“物象”和“背景”尽可能地区分开,并尽可能的消除其他的无用像素。一个很常见的例子是,纸质资料的二值化。
来源: Basel, Universitätsbibliothek, A II 1, f. 1v – Nicolaus de Lyra, Postilla super Genesim et Exodum https://www.e- codices.ch/de/list/one/ubb/A- II- 0001 (CC0)
在这个例子中,一个合适的阈值,可以很清晰的分割出背景与文字。换句话说,一个合适的阈值,能很好的分割出图像中的“有用”像素。从信息的角度上来说,一个合适的阈值,能够使得我们获得最多的“有用”信息。
二、“合适”阈值的量化分析
2.1 双峰直方图
常见的二值化任务,是将物象与背景进行分离,例如下图中的钱包二值化。
在这个分离任务中, 钱包被分为了一类,而背景则被分为了另一类。为了更清晰的了解这个图片中的明暗像素的数量特点,我们生成一下该图片像素在各个像素强度上的数量分布直方图。
横轴为像素强度(0~255),纵轴为该强度下的像素出现次数。不难看出,该图片有两个像素集中出现的强度区域,对应的就是组成背景的像素与组成钱包的像素。类似于这样,有两个明显峰值的直方图,我们称之为双峰直方图。
在双峰直方图的二值化过程中,为了保障尽可能地保证物象与背景的信息表达,我们需要找到一个合适的像素强度,作为阈值的取值。那该如何计算这个取值呢?
2.2 采用高斯概率密度函数的直方图建模
为什么要采用高斯概率密度函数对直方图进行建模?
- 图像前景、背景灰度受光照、传感器噪声影响,天然服从高斯分布;
- 用高斯 PDF 建模直方图双峰,能拟合出最优分割阈值;
- 相比固定阈值,可自适应光线变化,二值化更稳定、分割误差更小;
- 是 Otsu、自适应阈值等图像分割算法的数学基础。
对背景峰 + 前景(人)峰,各用一个高斯正态分布拟合:
第一步:统计灰度直方图 遍历整幅灰度图,统计 0~255 每个灰度的像素数量,得到直方图数组 hist[256]。
第二步:找直方图两个峰值 1. 遍历 hist,找到最高峰(背景均值 ) 2. 在另一区域找次高峰(前景均值 )
第三步:分别计算两个高斯的参数 对每个峰周围像素,计算:
- 均值 :灰度重心
- 方差 :灰度离散程度
- 权重 :该峰像素占总像素比例 得到两组参数:、
第四步:建立双峰高斯混合模型 整体直方图 = 两个高斯加权叠加:
通过这一系列步骤,我们能够得到如下图的模型:
2.3 计算最优阈值
在图像灰度直方图满足物象、背景服从双峰高斯分布的建模前提下,将物象与背景分别抽象为两个独立的高斯概率密度函数。灰度值对应某一高斯分布的概率密度,表征该灰度隶属于对应类别的置信程度。
令两个高斯分布概率密度相等,求解方程得到灰度交点 T,该交点即为最优二值化分割阈值。
从分类原理来看,交点处像素隶属于物象与背景的后验概率相等;以该灰度值作为分割界限,小于阈值判定为前景目标,大于阈值判定为背景区域。此分割方式可使物象误判为背景、背景误判为前景的两类错分像素总数最少,实现最小误差分割。
即对下式进行求解:
即可计算出最优二值化分割阈值。
未完待续