利用图像的直方图进行对比度增强的方法

  一般情况下,二值图像的灰度值等级是2=2(0\1),灰度图像的灰度值等级是28=256(0-255),

对于灰度图像来说,灰度值集中在较低的级别时,图像较暗,反之,则较亮,且灰度值分布较均匀时,图像的对比度也会比较明显。

1.图像直方图的计算方法

  对于灰度图像,图像的灰度值等级为256,将从0到255的每一个灰度等级对应在图像中的像素点的个数统计出来,然后,通过计算统计个数与整幅图像对应像素点的总个数的比值得到每一个灰度值等级在图像中出现的概率密度值,将灰度等级作为自变量,在图像中出现的概率为变量得到一个离散函数,对应的二维离散图像即为图像的直方图。

  p(i)=ni/N  (i=0、1、 2........255) 

2.直方图均衡方法

  1)HE

      map函数 T(n)=(2-1)∑i=0 n h(i)+0.5   其中h(i)=p(i)

  2)通过添加控制因子,调整对比度增强的级别。

      h(i)=1/(1+λ)*p(i)+λ/(1+λ)*u

  3)先对直方图进行平滑处理,去除直方图中前后差异过大的点(h(i)-h(i-1)超过一定限制),防止图像过增强后图像不适于人眼观看。

      h(i)=((1+λ)I+γ*DT D)-1  (p(i)+λ*u)  其中D为双边对称矩阵,I为单位矩阵

  4)将B&W 扩展方法的思想(这种方法使灰度值小的点更小,灰度值大的更大,从而使图像的对比度增强)加入,

      当    b<i<w时,h(i)=1/(1+λ)p(i)+λ/(1+λ)u

      当    i<=b 或者 i>=w时,h(i)=1/(1+λ+α)*(p(i)+λu)

  5)将上述方法综合后,提出一种新的方法

      h1 (i)=p(i/C)  求满足事件C的像素点对应的概率密度,

      事件C对应的像素点是满足 |f(m,n)-f(m,n-2)|>Threshold 的点(m,n)

      统计图像中所有满足条件的点的个数 N,以及这些满足条件的点对应的灰度等级的概率分布p(i/C),

      对应的伪代码为

        输入:源图像 f,

        参数:增强级别 g, B&W 扩展参数 b,w ,φ

        输出: 对比度增强后的图像 F

        initial k

        foreach row m do

         foreach column n do

            k=k+|f(m,n(-f(m,n-2)

            if |f(m,n)-f(m,n-2)|>Threshoold

                ++num[f(m,n)]

                ++N

            end

          end

        end

        Nomalize g*k to get k*

        u=min[N/256,umin]     

        foreach bin i do

          if  b<i<w then

            h[i]=(1-k*)u+k* h[i]

          else

            h[i]=1/(1+φ)((1-k*)u+k* h1 [i])

          end

        end

        foreach row m do

          foreach column n do

            F(m,n)=(2B-1)C(f(m,n))+0.5

          end

        end

            其中C(f(m,n))=∑i=0 f(m,n ) h(i)    ,k*=1/(1+λ)=nomalize(gk),  k是图像像素间差值的累加,使得控制因子自适应于图像的对比度,

            gk的归一化方法采用的是bit-shift operation

        

时间: 2024-08-24 01:56:29

利用图像的直方图进行对比度增强的方法的相关文章

opencv----彩色图像对比度增强

图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法. 直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法. 直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现; 直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强. 1.直方图拉伸 就是扩大将图像灰度的域值的一个过程,但是经常是基于灰度图像进行处理,以前在MATlab上对比度增强调用直方图函数就几

用于图像去雾的优化对比度增强算法

图像去雾哪家强?之前我们已经讨论过了著名的基于暗通道先验的图像去雾(Kaiming He, 2009)算法,如果你用兴趣可以参考: 暗通道优先的图像去雾算法(上) 暗通道优先的图像去雾算法(下) 此外,网上也有很多同道推荐了一篇由韩国学者所发表的研究论文<Optimized contrast enhancement for real-time image and video dehazing>(你也可以从文末参考文献[1]给出的链接中下载到这篇经典论文),其中原作者就提出了一个效果相当不错的图

优化的对比度增强算法用于有雾图像的清晰化处理(算法效果是我目前看到最为稳定的,且对天空具有天然的免疫力,极力推荐有需要的朋友研究)。

在未谈及具体的算法流程前,先贴几幅用该算法处理的效果. 不知道各位对这个算法的效果第一印象如何. 这个算法的原理来自于文章<Optimized contrast enhancement for real-time image and video dehazing>,作者是韩国人. 这个算法也是基于大气散射模型: 和现在一些常见的去雾文章有明显的不同的是,这篇文章的并不是基于暗通道原理的,也不是把重点强调在透射率图的细化上,而是提出了一种新的得到粗透射率图的方法.并且文章分别讲到了静态图像和视频

OpenCV2学习笔记(二):图像的直方图

直方图(Histogram)又称质量分布图.是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况.一般用横轴表示数据类型,纵轴表示分布情况.众所周知,一幅图像是由不同颜色值的像素组成,因此像素值在图像中的分布情况是这幅图像的一个重要特征,因此直方图广泛应用在数字图像处理中. 拍照是现实生活中必不可少的一部分,由于环境亮度.图像拍摄过程中透视光圈设置错误等影响,经常会拍出一些"过暗"的照片,此时美图.PS等美化工具可以派上用场.但是这些工具的算法通常都是不公开的,鉴于研究

[blogs 算法原理 ]局部标准差实现对比度增强

基于“局部标准差”的图像增强(原理.算法.代码) 一.理论 图像增强算法的基本原则是“降低低频区域,突出高频区域”,以此强化边缘,达到增强的目的.最简单的例子就是通过原始图像减去高斯模糊处理后的图像,就能够将边缘强化出来. 直方图均衡化也是一种非常常见的增强方法.但是为了避免背景的干扰,更倾向于采用“局部”方法进行处理.我们这里着重研究自适应对比度增强(ACE)的相关内容. ACE的定义和原理(TODO) ACE算法的相关内容: 计算低频成分: 对于具体的像素,一般可以通过计算以该像素为中心的局

Photoshop脚本 &gt; 图像的亮度和对比度

源自:http://coolketang.com/tutorials/menu3lesson1.php 本节将演示如何使用脚本,调整图像的亮度和对比度.首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 接着输入脚本代码: //定义一个变量[layer],用来表示Photoshop当前文档的当前图层. var layer = app.activeDocument.activeLayer; //定义一个变量[brightness],用来表示修

OpenCV 学习(计算图像的直方图)

OpenCV 计算图像的直方图 计算图像的直方图是图像处理领域一个非常常见的基本操作. OpenCV 中提供了 calcHist 函数来计算图像直方图.不过这个函数说实话挺难用的,研究了好久才掌握了些基本的用法. calcHist 函数 C++ 的函数原型如下: void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, SparseMat& hist, int dims, const i

OpenCV2+入门系列(四):计算图像的直方图,平均灰度,灰度方差

本篇懒得排版,直接在网页html编辑器编辑 在图像处理时,我们常常需要求出图像的直方图.灰度平均值.灰度的方差,这里给出一个opencv2+自带程序,实现这些功能. 直方图 对于直方图,使用cv::calcHist函数可以求出. 原型 void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize,

OpenCV笔记(四)——两幅图像线性混合、改变图像的亮度和对比度

一.两幅图像线性混合 线性混合,就是g(x) = a*f1(x) + b*f2(x).其中g为输出,f1.f2为输入.a+b=1. 作用1:线性混合可以用于去噪,假设噪声的产生符合均值为零.标准差的独立分布.多个高斯分布求平均值,即可去除噪声. 作用2:用于两张图片的切换.a从大到小变化,b从小到大变化.g就渐渐从f1变到f2. OpenCV提供了addWeighted函数,完成上述功能: C++: void addWeighted(InputArray src1, double alpha,