直方图统计

直方图均衡化

直方图均衡化(Histogram Equalization)可以增强图像对比度,主要的思想就是通过一个映射函数把一副图像的直方图分布变成近视均匀分布来提高图像的对比度,因此关键就是如何得到映射函数。

\[s_k=\sum_{j=0}^k \frac{n_j}{n}\, k=0,1,2\cdots, L-1\]

其中,$s_k$ 是当前灰度级经过累积分布函数映射之后的值,$n$ 是图像中像素的总和,$n_j$ 是当前灰度级的像素个数,$L$ 是图像中的灰度级别总数。

基于空间熵的全局对比度增强(SEGCE)

基于空间熵的灰度全局对比度增强(Spatial Entropy-Based Global Image Contrast Enhancement)通过计算图像的空间熵,得到一个可以拉伸像素值的映射函数,从而提高图像的对比度。

假设图像大小为 $H \times W$,每个像素值为 $x(i, j)$,SEGCE 的计算步骤如下:

首先将图像 $I$ 分成 $M \times N = K$ 个区域,对于每一个子区域 $I = \{ i_1, i_2, \dots, i_k \}$ 计算灰度空间直方图:

\[h_k = \{ h_k( m, n ) \mid 1 \le m \le M, 1 \le n \le N \}\]

其中 $h_k(m, n)$$\dots$

\[N = \left\lfloor \left( \frac{K}{r} \right)^{\frac{1}{2}} \right\rfloor, M = \lfloor \left( {K}{r} \right)^{\frac{1}{2}} \rfloor\]

计算空间熵:

\[S_k = -\sum_{m-1}^{M}\sum_{n-1}^{N}h_k(m,n)\log_2(h_k(m,n))\]

计算离散函数 $f_k$

\[f_k = \frac{S_k}{\sum_{l=1,l\neq k}^{K} S_l}\]

离散函数 $f_k$ 衡量灰度 $k$ 相比其它灰度级的重要性。计算累计分布函数之前对齐进行归一化

\[f_k = \frac{f_k}{\sum_{l=1}^{K}f_l}\]

计算累计分布函数 $F(k)$

\[F_k=\sum_{l=1}^{k}f_l\]

将映射函数拉伸到 $[0, 255]$,获取映射函数

\[y_k = \lfloor F_k(y_u - y_d) + y_d \rfloor\]

将原图像素利用映射函数得到新的对比度增强的图像。

应用问题总结:

  1. 对灰度图计算映射函数,然后使用同一个函数分别对 BGR 三个通道进行计算,效果可以,缺点是会使得画面偏暗;
  2. 对 BGR 三个通道分别计算映射函数,缺点是会导致偏色;

自适应及集成领域依赖方法的非线性增强(AINDANE)

参考论文《Adaptive and integrated neighborhood-dependent approach for nonlinear enhancement of color images》,算法有三个步骤:

  1. 全局曲线调整:根据图像亮度分布建立一个自适应的全局映射函数,作用是提高图像暗部像素值,压缩图像动态范围
  2. 自适应对比度增强:根据像素领域内的平均值和线束值本身比例做映射,自适应增强对比度
  3. 颜色恢复

全局曲线调整

计算出彩色图像的亮度值,可以有以下方法:

  1. YUV 空间的 Y 通道;
  2. HSL 空间的 L 分量;
  3. 对比度保留去色;

论文里使用的公式如下:

\[I(x,y) = \frac{76.245 I_R(x,y) + 149.685I_G(x,y) + 29.07I_B(x,y)}{255}\]

通过归一化后得到:

\[I_n(x,y) = \frac{I(x,y)}{255}\]

使用下面的映射函数来增强图像亮度:

\[I^{\prime}_{n} = \frac{I_n^{(0.75z+0.25)+(1-I_n)0.4(1-z)+I_n^{(2-z)}}}{2}\]

其中参数 $z$ 值由图像本身内容决定:

\[z = \begin{cases} 0 & \text{for }L\le 50 \\ \frac{L-50}{100} & \text{for }50<L\le 150 \\ 1 & \text{for }L\le 150 \end{cases}\]

其中 $L$ 表示亮度图像的累计直方图(CDF)达到 0.1 时的色阶值,即亮度图像中从小到大排序的前 90% 色阶值的最大值

自适应对比度增强

全局对比度增强算法的思想是使得图像中亮的像素更亮,暗的像素更暗,提高了图像的动态范围,这与第一步的全局曲线调整是相反的。论文中提出的方法考虑了邻域的信息,如果当前的像素值比周边像素的平均值比较大的时候,增大当前像素值;如果当前的像素值比周边像素平均值比较小时,减小当前像素值。这种操作可以同时提高图像的对比度和细节、压缩图像动态范围。

邻域信息的计算可以用高斯模糊,对比度增强图像 $S(x,y)$ 的计算如下:

\[S(x,y) = 255I^{\prime}_n(x,y)^{E(x,y)}\]

指数 Mask 计算如下:

\[E(x,y) = r(x,y)^{P} = \left[ \frac{I_{\text{conv}}(x,y)}{I(x,y)} \right]^{P}\]

其中 $I_{\text{conv}}(x,y)$ 是对亮度图进行卷积后的结果,$P$ 是衡量原始图像对比度的值,如果原始图像对比度比较差,$P$ 值应该较大,可以通过计算原始图像亮度图的全局均方差来决定:

\[P = \begin{cases} 3 & \text{for }\sigma \le 3 \\ \frac{27-2\sigma}{7} & \text{for }3<L\le 10 \\ 1 & \text{for }\sigma \le 10 \end{cases}\]

当卷积值 $I_{\text{conv}}(x,y)$ 小于原始值 $I(x,y)$ 的时候,代表中心点亮度大于周边亮度,此时 $E(x,y)<1$,最终算得 $S(x,y) > I^{\prime}_n(x,y)$,亮的会更亮;如果卷积值大于原始值,代表中心点亮度小于周边亮度,此时 $E(x,y)>1$,最终算得 $S(x,y) < I^{\prime}_n(x,y)$,导致暗的地方更暗。

在这里可以做多个尺度的卷积和增强,来获取不同的领域信息。当尺度较小的时候,能够提高局部对比度,尺度较大时,虽然损失了细节,但是可以结合更多的全局信息。在多尺度下可以使用以下公式:

\[S(x,y) = \sum_{i}w_i S_i(x,y)\]

尺度的选择可以设置固定值,也可以根据图像大小进行自适应调整。

颜色恢复

颜色恢复计算公式:

\[S_j(x,y) = S(x,y)\frac{I_j(x,y)}{I(x,y)}\lambda_j\]

通常 $\lambda=1$ 可以保证图像整体没有色彩偏移。