直方图均衡化 & 查准率与查全率

Nov. 16th, 2016


图像处理 直方图均衡化 机器学习 查准率查全率

直方图均衡化 Histogram Equalization

首先,什么是直方图呢?直方图是离散的函数$h(r_k)=n_k$,其中$k=0,1,\dots ,L-1$,$r_k$是第$k$级灰度值,$n_k$是图像中灰度为$r_k$的像素个数,$L$是灰度级总数。图像处理实践中通常使用归一化直方图,表示为$p(r_k)=n_k/N$,其中$N$是图像像素点总数。放张图来感受一下:

上面那张图明显过亮,对比度比较低,像素点的灰度值集中在$150$以上;而下面那张对比度比较高,像素点的灰度值基本均匀分布。

如果我们希望上面那张图的对比度能够更大,像下面那张图一样,灰度细节更加丰富,那么从直方图上来看,我们需要将像素点的灰度值也均匀分布在整个灰度值区间$[0,L-1]$,换句话来说,我们需要找到这样的一个灰度值映射关系$s=T(r)$,它首先要满足如下两个前提条件:

  1. $T(r)$在区间$0\le r\le L-1$上为单调递增函数
  2. 当$0\le r\le L-1$时,$0\le T(r)\le L-1$

条件$1$保证了映射后不会出现灰度值反转的情况,条件$2$保证了映射后的值不会超过原有的灰度值区间。

这里我们先对映射做一个简要地介绍,如下图所示的三个映射均满足上述的两个前提条件(图中$L=256$):

最简单的是映射$T_3(r)=r$,它没有对原像素点的灰度值做任何变化;映射$T_1(r)=\sqrt{(L-1)r}$将像素点的灰度值增大,使图像更加明亮;映射$T_2(r)=\frac {x^2}{L-1}$则将像素点灰度值减小,图像更加灰暗。下图可以明显看出映射前后图像的差别:

回到我们的问题上,假设图像像素点的灰度值都集中在区间$[a,b]$内,那么我们希望这个区间内的灰度值可以映射到整个灰度区间,如下图所示:

而一张图的灰度级可以看成是区间$[0,L-1]$内的随机变量$^1$$r$,上左图的直方图(归一化之后)就可以看作是随机变量$r$的概率密度函数$p(r)$,而上右图很像其累积分布函数。因为累积分布函数是单调递增的,同时取值在区间$[0,1]$内,乘以常数$L-1$便可扩展到$[0,L-1]$之间,因此满足上述的两个前提条件,所以我们考虑使用累积分布函数作为映射$T(r)$,即:

$$ s=T(r)=(L-1)\int_0^r p(w)dw $$

假设灰度值位于区间$\Delta r$中的像素点占比为$R$,那么有$R=p(r)\Delta r$,经过$T(r)$的映射,灰度值区间变为了$\Delta s$,那么由于像素点的占比不变$^2$,有$R=p(s)\Delta s$。当$\Delta r\to 0$时,即有:

$$ p(s)=p(r)\frac{dr}{ds} $$

因此:

$$ \frac{ds}{dr}=\frac{dT(r)}{dr}=(L-1)\frac{d}{dr} \Big[ \int_0^rp(w)dw\Big]=(L-1)p(r) $$

$$ p(s)=p(r)\frac{dr}{ds}=p(r)\frac{1}{(L-1)p(r)}=\frac{1}{L-1},\qquad 0\le s\le L-1 $$

也就是说随机变量$s$的概率密度是均匀的,正好符合我们希望像素的灰度值均匀分布的要求。而且可以清楚的看到,$s$的分布与$r$的分布无关,也就是说对于任何种类的图像,进行这样的映射后都可以实现灰度值的均衡化。

到这里,我们已经找到了可以满足需求的映射$T(r)$,但是上面的推导都是建立在变量$r$和$s$连续的基础上。在实际的图像操作中,灰度值是离散的,它取$[0,L-1]$之间的整数,因此$s$的离散形式即为:

$$ s_k=T(r_k)=(L-1)\sum_{j=0}^kp(r_j)=\frac{L-1}{N}\sum_{j=0}^kn_j, \qquad k=0,1,\dots,L-1 $$

而且得到的结果要取最近的整数值作为近似。

下面是一个比较全的示例:

从上例中也可以看出,均衡化后的直方图中,有许多处在间隙中的灰度值没有像素点,这是因为映射之后取整的缘故。 小结一下,直方图均衡化是图像处理中非常有用的一种方法,而且由于实现起来很简单,计算量也比较小,而且只要知道映射$T(r)$,这种操作是可逆的。但是由于仅仅依靠直方图的信息,对图像中的噪点也会进行无差别的映射,因此可能会增大噪声的影响。


1. 这里假设随机变量$r$是连续的,这里只是从理论上退推导使用累积分布函数作为映射函数的效果。在实际图像操作中会取最近的整数值。

2. 灰度值的映射作用于图像中的每一个像素点,若像素点$P$的灰度值在区间$\Delta r$内,那么映射后一定位于区间$\Delta s$内。同样的,对于不在区间$\Delta r$中的像素点,映射后也一定不在$\Delta s$中。因此映射前后对应区间内的像素点数一定相同。


查准率和查全率关系的一点思考

最近在看《机器学习》-- 周志华 这本书,看到$2.3.2$节关于查准率和查全率的讲解,产生了两个问题,看了一篇文献《查准率与查全率关系辨析》,对这两者的关系有了一个比较清晰的认识,在此记录一下。 首先是书中引起疑惑的一段话:

查准率和查全率是一对矛盾的度量,一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。 通常只有在一些简单任务中,才可能使查全率和查准率都很高。

下面是文中混淆矩阵、查准率$P$、查全率$R$的定义:

真实情况
预测结果
正例 反例
正例 真正例($TP$) 假反例($FN$)
反例 假正例($FP$) 真反例($TN$)

$$P=\frac{TP}{TP+FP} \qquad\qquad R=\frac{TP}{TP+FN}$$

第一个问题是:

从两者的数学表达式定义上看,并没有明显“矛盾”的关系,那为什么一般情况下一个量增大,另一个量就会减小呢?真实的关系是怎样的呢?

书中同样给出了一个直观上的解释:

(一堆瓜,有好有坏)若希望将好瓜尽可能多地选出来,则可以通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样查准率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低。

我们从两个量的定义入手,首先看一下查全率$R=\frac{TP}{TP+FN}$,对于样本集来说,实际的正例和反例的数量是固定的,也就是$TP+FN=C_1$,$FP+TN=C_2$ 均为常数。因此$R=\frac{TP}{C_1}$,现在假设通过某种方法,使得真正例的数目增加$\Delta TP$,这样就使得查全率$R$增大。

那么此时查准率$P$如何变化呢?变化后的查准率$P'=\frac{TP+\Delta TP}{TP+\Delta TP+FP+\Delta FP}$,其中$\Delta FP$可正可负可为零,那么其变化率:

$$\Delta P=P'-P=\frac{TP+\Delta TP}{TP+\Delta TP+FP+\Delta FP}-\frac{TP}{TP+FP}=\frac{FP\Delta TP-TP\Delta FP}{(TP+\Delta TP+FP+\Delta FP)(TP+FN)}$$

易得分母为正,假设$\Delta FP\le 0$,那么分子为正,说明查准率$P$也增大;假设$\Delta FP>0$,那么若$\frac{\Delta FP}{FP}<\frac{\Delta TP}{TP}$,则$P$增大,若$\frac{\Delta FP}{FP}>\frac{\Delta TP}{TP}$,则$P$减小。

到这里,我们发现,随着查全率$R$的增大,查准率$P$的变化取决于假正例的变化量$\Delta FP$的变化,可能增大、减小或不变,也就是说,两者并没有必然的此消彼长的关系。

那么为什么一般情况下会一增一减呢?考虑上面不等式两边分式的意义:$\frac{\Delta FP}{FP}$为假正例的变化率,$\frac{\Delta TP}{TP}$为真正例的变化率。通常来说,增大查全率的直观方法就是“降低标准”,也就是将之前认为是反例的部分样本也都认为是正例,这样的话虽然能够增大真正例的数目 ,但难免也会增大假正例的数目,而且因为这部分样本本身“不足够好”,所以增大的假正例的比例会更多,用数学表达就是$\frac{\Delta FP}{FP}>\frac{\Delta TP}{TP}$,这也就导致了一般情况下查准率$P$会降低。

第二个问题是:

既然查准率和查全率并非线性的关系,那么为何做出的$P-R$曲线(示例如下图)然是近似线性的呢?

考虑$P-R$曲线是怎么做出来的,书中这样描述:

根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本,按此顺序逐个把样本作为正例预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了该曲线。

可以看出来,刚开始我们将左右样本都预测为反例,那么$TP=FP=0$,所以$R=\frac{TP}{TP+FN}=\frac{0}{0+FN}=0$,$P=\frac{TP}{TP+FP}=\frac{0}{0+0}=1$。接下来增大查全率的方法正如问题一解答的最后一段所述,因此一般情况下查准率会逐渐降低,但书中也有附注:

现实任务中的P-R曲线常是非单调、不平滑的,在很多局部有上下波动。

这也说明查准率和查全率的关系并非线性,而且对样本集比较敏感。