【论文阅读笔记】Contrast image correction method

news/2024/11/29 12:38:33/

论文小结:

  本文是2010年发表出来的一篇文章,提出的方法是一种增强对比度的方法,其基本原理是自适应参数的 ganma 校正。ganma 校正的目标在于同时校正曝光过度和曝光不足区域的图像。
  同时,为了防止光晕伪影,使用双边滤波用于指数校正的掩码。
  ganma 校正一半的公式如下,本文就是基于此进行的改进。 P i x e l o u t = 255 ∗ ( P i x e l i n 255 ) γ Pixel_{out}=255*(\frac{Pixel_{in}}{255})^\gamma Pixelout=255(255Pixelin)γ

论文介绍

增强技术相关算法

  在图像处理领域,已经有几种调整图像对比度的方法。通常,可以将这些算法分为两类对比度校正:全局校正和局部校正。当必须同时调整阴影和高光细节时,全局对比度校正可能会产生令人失望的结果。 另一方面,局部对比度校正优点是它们提供了一种将一个输入值映射到许多不同输出值的方法,这取决于相邻像素的值,并允许以这种方式同时进行阴影和高光调整。

  在全局对比度增强技术中,ganma 校正和直方图均衡化是最常见的。在图像原始灰度分布的基础上,将图像的直方图重塑为不同的具有均匀分布特性的直方图,以增强对比度。

  在局部对比度增强算法方向,也提出了几种不同算法。Moroney 4 ^4 4使用非线性掩码来执行局部对比度校正(应该是本文前身)。这种校正可以同时使阴影变亮和使高光变暗,它基于对输入数据进行简单的逐像素伽玛校正。但是,Moroney的算法那的局限性之一(其他局部校正算法也很常见),是会引入“光晕”(halo)伪像,是由于场景边界的平滑(due to the smoothing across scene boundaries),也会导致场景动态范围变小。自适应直方图均衡化(AHE)方法使用局部图像信息来增强图像。在参考文献《Adaptive image contrast enhancement using generalizations
of histogram equalization》回顾和比较了几种自适应(AHE)技术。作者也提出了基于引入两个参数的“修正累积函数”的新AHE方法。

  Rizzi 13 ^{13} 13提出了一种无监督增强数字图像的算法,该算法同时具有全局和局部效果,称为自动颜色均衡(ACE)。ACE 受人类视觉一些适应机制的启发,通过考虑图像中的颜色空间分布来实现局部过滤效果。 ACE 已被证明可以实现有效的颜色恒定校正和令人满意的色调均衡,同时执行全局和局部图像校正。 但是,该算法的计算成本非常高。

本文方法介绍

  本文使用了Moroney的算法作为基础开发局部对比度校正,其中使用双边滤波器,而不是去使用会产生光晕伪影的高斯滤波器。整体的思路是依据一个ganma 校正,对于一个 8 8 8-bit的灰度图,有如下的表示,其中 γ \gamma γ通常是一个 0 − 3 0-3 03之间的正数。 O ( i , j ) = 255 [ I ( i , j ) 255 ] γ (1) O(i,j)=255[\frac{I(i,j)}{255}]^\gamma\tag{1} O(i,j)=255[255I(i,j)]γ(1)

  此校正为完全曝光不足或曝光过度的图像提供了良好的结果。 然而,当图像中同时存在曝光不足和曝光过度的区域时,这种校正并不令人满意。下图展示了一个 γ = 0.35 \gamma=0.35 γ=0.35,即 1 2.857 \frac{1}{2.857} 2.8571
在这里插入图片描述

  将等式(1)扩展到彩色图像也是很简单的,只要将RGB空间的每个分量分别应用或者仅应用于YCbCr空间的亮度Y。对于一些只有某些区域具有正确照明而其他区域曝光不足的图像,需要进行局部校正以允许同时进行阴影和高光调整。由于本文算法对局部感兴趣,所以伽马校正的指数不再是常数,而是被选为一个函数,该函数取决于要校正的点 ( i , j ) (i,j) (i,j)及其相邻像素点 N ( i , j ) N(i,j) N(i,j)。等式(1)变为: O ( i , j ) = 255 ∗ [ I ( i , j ) 255 ] γ [ i , j , N ( i , j ) ] (2) O(i,j)=255*[\frac{I(i,j)}{255}]^{\gamma[i,j,N(i,j)]}\tag{2} O(i,j)=255[255I(i,j)]γ[i,j,N(i,j)](2)

  Moroney建议使用以下指数表达式: γ [ i , j , N ( i , j ) ] = 2 128 − m a s k ( i , j ) / 128 (3) \gamma[i,j,N(i,j)]=2^{128-mask(i,j)/128}\tag{3} γ[i,j,N(i,j)]=2128mask(i,j)/128(3)

  上面的公式(3)是原文,经过实践测试和理解,应该是 γ [ i , j , N ( i , j ) ] = 2 128 − m a s k ( i , j ) 128 \gamma[i,j,N(i,j)]=2^{\frac{128-mask(i,j)}{128}} γ[i,j,N(i,j)]=2128128mask(i,j)

  其中, m a s k ( i , j ) mask(i,j) mask(i,j)是输入图像强度的反响高斯低筒滤波版本。当掩码大于 128 128 128时,对应的是原图像上暗像素和暗邻居,会让指数 γ \gamma γ大于 1 1 1,因此等式(2)会提升亮度。相同地,当掩码小于 128 128 128,对应原图像的是亮像素和亮邻居,会让指数 γ \gamma γ小于 1 1 1,输出亮度下降。掩码等于 128 128 128会产生指数 1 1 1,输出亮度不变。与平均值128的距离越大,校正越强。同时,作者注意到,黑色和白色像素,和在伽马校正中一样,独立于指数值保持不变。因此,公式(3)变成了如下公式:其中 B F m a s k ( i , j ) BFmask(i,j) BFmask(i,j)是输入图像强度的反向低通版本,使用双边滤波器进行滤波, α \alpha α是取决于图像属性的参数。 γ [ i , j , N ( i , j ) ] = α [ 128 − B F m a s k ( i , j ) / 128 ] (4) \gamma[i,j,N(i,j)]=\alpha^{[128-BFmask(i,j)/128]}\tag{4} γ[i,j,N(i,j)]=α[128BFmask(i,j)/128](4)

LCC中的双边滤波

  高斯低通滤波计算邻域中像素值的加权平均值,其中权重随着距中心的距离而减小。 假设附近的像素可能具有相似的值,因此将它们平均在一起是合适的。 然而,缓慢空间变化的假设在边缘处失败,因此边缘被低通滤波模糊。为了避免跨边缘进行平均,同时仍在平滑区域内进行平均,Tomasi 和 Manduchi 提出了双边滤波器。公式(4)中使用双边滤波代替高斯滤波计算mask是为了减少空间滤波器在某些图像仅使用高斯滤波器时会出现的光晕效应(halo effect)。特别是某些高强度梯度的区域是显示光晕效应的候选区域。作者认为,使用双边滤波预计会减弱光环效应。本文完整的公式如下: O ( i , j ) = 255 ∗ [ I ( i , j ) 255 ] α [ 128 − B F m a s k ( i , j ) / 128 ] (5) O(i,j)=255*[\frac{I(i,j)}{255}]^{\alpha^{[128-BFmask(i,j)/128]}}\tag{5} O(i,j)=255[255I(i,j)]α[128BFmask(i,j)/128](5)

  其中, B F m a s k ( i , j ) BFmask(i,j) BFmask(i,j)是窗口为 ( 2 K + 1 ) × ( 2 K + 1 ) (2K+1)\times (2K+1) (2K+1)×(2K+1)和由输入的逆版本 I i n v ( i , j ) = 255 − I ( i , j ) I_{inv}(i,j)=255-I(i,j) Iinv(i,j)=255I(i,j)的双边滤波图像给出。

   B F m a s k ( i , j ) = 1 k ( i , j ) ∑ p = i − K i + K ∑ q = j − K j + K × e x p { − 1 2 σ 1 2 [ ( i − p ) 2 + ( j − q ) 2 ] } × e x p { − 1 2 σ 2 2 [ I i n v ( i , j ) − I i n v ( p , q ) ] 2 } × I i n v ( p , q ) (6) BFmask(i,j)=\frac{1}{k(i,j)}\sum_{p=i-K}^{i+K}\sum_{q=j-K}^{j+K}\times \mathbb{exp}\{-\frac1{2\sigma_1^2}[(i-p)^2+(j-q)^2]\} \times \mathbb{exp}\{ -\frac1{2\sigma_2^2}[I_{inv}(i,j) - I_{inv}(p,q)]^2 \} \times I_{inv}(p, q) \tag{6} BFmask(i,j)=k(i,j)1p=iKi+Kq=jKj+K×exp{2σ121[(ip)2+(jq)2]}×exp{2σ221[Iinv(i,j)Iinv(p,q)]2}×Iinv(p,q)(6)

   k ( i , j ) = ∑ p = i − K i + K ∑ q = j − K j + K e x p { − 1 2 σ 1 2 [ ( i − p ) 2 + ( j − q ) 2 ] } × e x p { − 1 2 σ 2 2 [ I i n v ( i , j ) − I i n v ( p , q ) ] 2 } (7) k(i,j)=\sum_{p=i-K}^{i+K}\sum_{q=j-K}^{j+K} \mathbb{exp}\{-\frac1{2\sigma_1^2}[(i-p)^2+(j-q)^2]\} \times \mathbb{exp}\{ -\frac1{2\sigma_2^2}[I_{inv}(i,j) - I_{inv}(p,q)]^2 \} \tag{7} k(i,j)=p=iKi+Kq=jKj+Kexp{2σ121[(ip)2+(jq)2]}×exp{2σ221[Iinv(i,j)Iinv(p,q)]2}(7)

  其中, σ 1 \sigma_1 σ1是高斯函数在空间域的标准差, σ 2 \sigma_2 σ2是高斯函数在强度域的标准差。参数 α 1 \alpha_1 α1基于所需的低通滤波量。 α 1 \alpha_1 α1越大,模糊越重,因为会结合更远位置的值。相似地, σ 2 \sigma_2 σ2是所需像素的组合量, σ 2 \sigma_2 σ2越大,双边滤波越接近高斯低通滤波。窗口大小 K K K取决于空间高斯的形状,通过如下联系: K = ⌊ 2.5 × σ 1 ⌋ (8) K=\lfloor 2.5\times \sigma_1\rfloor\tag{8} K=2.5×σ1(8)

  其中 ⌊ ⋅ ⌋ \lfloor \cdot \rfloor 为向下取整数。如果 σ 1 \sigma_1 σ1太高,图像的结果会过于模糊,指数趋于一个常数,那么公式(5)就会趋于一个简单的伽马校正,如公式(1)。如果窗口太小,图像不模糊,校正就没有考虑图像的局部属性

阶段效果展示

  如下面的图像有一个高强度梯度,因此是会产生光晕效应的候选图像。
在这里插入图片描述

  下图展示了 σ 1 = 2 \sigma_1=2 σ1=2时的LCC输出以及对应的双边滤波mask。
在这里插入图片描述

  下图展示了Moroney校正和相应的空间高斯mask。
在这里插入图片描述

  比较这两个图,可以看到高斯模糊输出图的光晕伪影在双边滤波中显著减少。

  有很多种加速双边滤波的算法。本文采用了使用维度 K K K大小为 σ 1 ∗ 3 \sigma_1*3 σ13盒滤波来简单替换公式(6)中的空间高斯。这个替换后的输出图像没有显示较大的区别,但在上图上有7倍的时间缩减感觉不太靠谱,这不就自定义 σ \sigma σ的高斯模糊?那可能调试得当,高斯模糊和双边模糊效果差不多。

α \alpha α参数优化

  作者认为,最好根据每张图片的特点进行不同的对比度校正。对于低对比度的图像,会需要更强的校正,那么 α \alpha α应该更高,比如在 2 − 3 2-3 23之间。而对于对比度较好的图像, α \alpha α应该较小到 1 1 1,对应的是没有校正。需要再判断是否需要这个“优化”

  假设输入图的平均值为 I ^ \hat{I} I^,如果 I ^ < 128 \hat{I}<128 I^<128,则意味着暗图,mask趋向于 255 255 255,因为mask是强度图的反向。则定义 α = l n ( I ^ 255 ) l n ( 0.5 ) \alpha=\frac{\mathbb{ln}(\frac{\hat{I}}{255})}{\mathbb{ln}(0.5)} α=ln(0.5)ln(255I^)

  如果 I ^ > 128 \hat{I}>128 I^>128,说明图像是亮图,则定义 α = l n ( 0.5 ) l n ( I ^ 255 ) \alpha=\frac{\mathbb{ln}(0.5)}{\mathbb{ln}(\frac{\hat{I}}{255})} α=ln(255I^)ln(0.5)

  当 α < 1.2 \alpha<1.2 α<1.2,则说明原始图像不需要拉升(the original image does not need to be elaborated)。比如下图所示,在 α \alpha α不同参数的情况下,LCC的输出图像。
在这里插入图片描述

对比度增强管道

  本文增强算法的整个管道可被组织为一系列算法,如下图所示。
在这里插入图片描述

  作者通过对局部校正前后的强度直方图进行了更深入的分析,发现:尽管更好地分配了灰度图级别,但整体的对比度增强不是令人满意的。此外,特别是对于那些具有压缩伪影的低质量图像,较暗区域中的噪声会得到增强

  公式(5)的局部校正公司就会带来让处理后的图像变灰的效果。为了克服这种不良的图像质量损失,本节介绍了进一步的对比度增强步骤,包括拉升Strethcing、裁剪Clipping和增强饱和度Saturation的算法。流程如下:

  1. RGB空间转为YCbCr空间;
  2. 计算图像中暗像素的比例。暗像素的定义为:亮度Y的值小于 35 35 35,同时其色度半径( 2 ∗ ( C b − 128 ) + 2 ∗ ( C r − 128 ) 2 \frac{2 * (Cb-128) + 2 * (Cr - 128)}{2} 22(Cb128)+2(Cr128))小于 20 20 20
  3. 定义暗像素所占据的拉升块(stretched bins) bstr ,为LCC输出的强度图的暗像素 30 % 30\% 30%占据的累积直方图块数(bins) b_output30%,和输入强度图的暗像素 30 % 30\% 30%占据的累积直方图块数(bins) b_input30%之间的差值。即 bstr = b_output30% - b_input30%。在必须恢复暗区的情况下,经验建议设置为 30% 的像素百分比通常落在直方图的窄峰下方的第一个箱中,与其余暗像素一起。因此,这些像素中的大多数都被重新定位为几乎初始值。 然而,在曝光不足区域的情况下,相同的百分比通常落在更广泛的峰值下,因此只有部分暗像素被恢复。(大意就是拉直方图)
  4. 如果没有暗像素,则进行拉伸以获得 0.2% 的较暗像素的裁剪;
  5. 在任何情况下,要裁剪的最大 bin 数都设置为 50。

颜色饱和度恢复

  为了最小化输入图像和输出图像之间色彩饱和度的变化,作者借鉴了前人的建议,将Y通道的变化也相应地对R/G/B通道进行调整: R ′ = 1 2 [ Y ′ Y ( R + Y ) + R − Y ] R'=\frac12[\frac{Y'}Y(R+Y)+R-Y] R=21[YY(R+Y)+RY] G = 1 2 [ Y ′ Y ( G + Y ) + G − Y ] G=\frac12[\frac{Y'}Y(G+Y)+G-Y] G=21[YY(G+Y)+GY] B ′ = 1 2 [ Y ′ Y ( B + Y ) + B − Y ] B'=\frac12[\frac{Y'}Y(B+Y)+B-Y] B=21[YY(B+Y)+BY]

  其中, Y ′ Y' Y是LCC经过裁剪clipping校正之后的亮度值。

结果对比

  下图展示了两张图像,其中直方图较暗的部分(图7的前50个bin和图8的前20个bin)对应于我们想要增强的场景的暗区。图7和8的中间行,都显示应用公式(5)得到的LCC结果都会使这些暗区域太亮的相同效果。此外,LCC校正后的图像显示出不饱和的颜色。这两个图的直方图拉升和裁剪的下一步是不同的。对于图7,只需要回复部分暗像素;而对于图8,必须恢复衣服的所有暗像素。图7和图8的最后一行,显示出了最终的精细图像(LCC+裁剪+饱和度)及其相应的直方图。
在这里插入图片描述
在这里插入图片描述

  下面两个图展示了本文算法和其他一些方法的比较。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/103988.html

相关文章

从零开始学Android开发期末复习重点

目录 前言作业&#xff11;作业&#xff12;作业&#xff13;作业4作业5作业6 前言 物联网应用技术课程期末复习重点——学习通作业&#xff1a; 操作系统&#xff1a;Ubuntu22.04 作业&#xff11; 简述Android系统架构。 Android 的系统架构和它的操作系统一样&#xff…

测试之路,你知道这些变化吗?突破后助你走得更远...

前言 Python自动化测试&#xff1a;7天练完这60个实战项目&#xff0c;年薪过35w。 目前的面试求职市场上&#xff0c;测试领域有哪些变化&#xff1f; 以这两年软件测试发展经历来看&#xff0c;现在的求职市场&#xff0c;已经不仅仅只考察个人的项目经验和技术能力了&#…

牛客网Linux错题一

1.关于Linux下的进程&#xff0c;论述不正确的是&#xff08;A&#xff09; A.僵尸进程会被init进程接管&#xff0c;僵尸进程不糊造成资源浪费 B.子进程的父进程在它之前退出&#xff0c;子进程会被init进程接管&#xff0c;它不会造成资源浪费 C.进程是资源管理的最小单位…

二十分钟秒懂:实现前后端分离开发(vue+element+spring boot+mybatis+MySQL)

目录 开发者介绍 什么是前后端分离开发 vue与springboot开发的优势 Vue.js 的优势&#xff1a; Spring Boot 的优势&#xff1a; vue与springboot如何实现前后端连接 demo简介 重要部分前端部分代码 重要部分后端代码 后端解决跨域问题 Controller部分 xml部分 se…

vue3的api解读-ref和reactive

目录 构造一个演示框架&#xff08;VUE3&#xff09; /src/examples/Helloworld.tsx /src/mytypes.d.ts /src/main.ts /src/App.tsx /src/layout.css /src/examples/RefExample.tsx /src/examples/ReactiveExample.tsx 思考 Vue提供的Reactive模式和vue.observable有…

机器学习 监督学习 Week2

Lib01 多变量线性回归 依旧是房价预测&#xff0c;但这次引入了多个变量&#xff0c;不仅仅只有房屋面积影响着房价&#xff0c;依旧尝试使用梯度下降算法找到最优的【w,b】&#xff0c;并且习惯使用向量点乘运算提高效率 import copy, math import numpy as np import matplot…

C++入门--初步认识类和对象

0.前言 前面几章&#xff0c;我们一起学习了C和C语言的不同之处&#xff0c;已经算是半只脚迈入了C的“门槛”&#xff0c;本章让我们继续学习C的类和对象。 1.面向对过程和面向对象的初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&…

一个拦截XSSI 识别Web蜜罐的插件

说明 这是一个带有学习和研究性质的Chrome扩展程序。 功能 截获页面中发起的XSSI请求&#xff0c;通过域名、URI、Query黑名单特征识别阻断可疑的XSSI&#xff08;Jsonp Callback、XSS等&#xff09; 对可疑URL进行深度检测&#xff0c;通过发送请求获取body内容&#xff0c…