直方图均衡化 订阅
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。 展开全文
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
信息
外文名
Histogram Equalization
属    于
直方图均衡化
方    法
分成两类
含    义
图像处理领域中图像直方图调整
中文名
直方图均衡化
直方图均衡化纵览
这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。 [1] 
收起全文
精华内容
参与话题
问答
  • 直方图均衡化的数学原理

    万次阅读 多人点赞 2016-09-04 13:36:19
    直方图均衡化的数学原理直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度...

    直方图均衡化的数学原理

    直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布【1】。有关直方图均衡化的深入介绍,可以参考作者的另一篇博客直方图匹配的数学原理(其中包含为什么要选用累积分布函数做映射函数?以及推导过程)

    下图为直方图均衡化的过程,体现了“均衡”的含义:(概率密度的均匀)

    网上可以查阅到关于直方图均衡化的各种解释、用法、程序、优缺点,这里只关注直方图均衡化的数学原理(可以参阅【1】)。

    我们知道直方图变换其实是一种灰度变换,灰度变换的变换函数决定了输入随机变量与输出随机变量之间的关系,也就是两个随机变量的关系;一副图像是二维离散的数据,不利于使用数学的工具进行处理,在数字图像处理中,我们通常是采用连续的变量进行推导,最后在推广到离散的情况。

    以下我们介绍:1.图像直方图的定义 2.直方图变换的理论基础(为什么介绍它?直方图变换是直方图均衡化的基础)3.概率知识-随机变量的函数分布 4.直方图均衡化的理论基础 5.离散形式的直方图均衡化。

    一、图像直方图的定义

    1.定义(1):

    2.定义(2):

    3.比较:

    二、直方图变换的理论基础

    注意:T(r)为单值单调增加(此为数字图像处理-冈萨雷斯-第二版中的表述),在第三版中有一些变化,具体的可以查阅此书的对应章节。

    三、概率论的知识-随机变量的函数的分布

    这一块涉及了概率论的知识-随机变量的函数的分布:

    四、直方图均衡化的理论基础

    五、离散形式的直方图均衡化

    六、例子

    参考资料:

    【1】:【数字图像处理】直方图均衡化详解及编程实现
    http://blog.csdn.net/xiajun07061225/article/details/6910129

    参考书籍:

    【2】:数字图像处理-冈萨雷斯-第二版

    【3】:数字图像处理-冈萨雷斯-第三版

    【4】:《概率论与数理统计》浙大版(第四版)

     

    展开全文
  • 直方图均衡化

    千次阅读 2016-07-14 17:15:19
    直方图均衡化

    直方图均衡化的作用是图像增强。
    (就是想使得图像的直方图分布尽可能均匀,理想情况各个灰度值的对应的像素点个数相同)
    有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。
    第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

    第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是
    这里写图片描述

    其中,n是图像中像素的总和,是当前灰度级的像素个数,L是图像中可能的灰度级总数。

    通过上面的公式,直方图均衡化的步骤是:
    (1)、我们求出图像的直方图。
    (2)、计算出图像的累计直方图,归一化的累计直方图(即每一项变成概率)。
    (3)、得到每个灰度值所对应的累计直方图中的概率后,用概率乘上想要将图像映射到的像素区域最大值(例如,8位图像,可以映射到255)。
    (4)、即得到了直方图均衡化后的图像。彩色图像也是一样的,只要分别对RGB层进行上述处理即可。

    来看看通过上述公式怎样实现的拉伸。假设有如下图像:

    这里写图片描述
    得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:

    这里写图片描述
    即变换后的灰度值=原灰度值对应的累积分布概率*255(假设是8位图像,像素值得取值为【0,255】)
    映射后的图像如下所示:

    这里写图片描述

    以上就是直方图映射均衡化的步骤。

    关于为什么用累积分布还有下面的解释:
    这里写图片描述
    这里写图片描述
    这里写图片描述

    原图
    这里写图片描述
    均衡化后
    这里写图片描述
    python代码实现:

    #-*- coding:utf-8 -*-
    
    from PIL import Image
    from pylab import *
    from numpy import *
    import matplotlib.pyplot as plt
    
    #计算直方图
    def computeHist(img):
        m,n=shape(img)
        hist=[0]*256
        for i in range(0,m):
            for j in range(0,n):
                hist[img[i,j]]+=1
        return hist
    #计算累积直方图
    def computeCDF(hist,img):
        m,n=shape(img)
        p=[0]*256
        for i in range(0,256):
            p[i]=float(hist[i])/(m*n)
        return p
    #将累计直方图改为概率模式
    def histeq(p):
    
        c=[0]*256
        for i in range(0,256):
            for j in range(0,i):
                c[i]+=p[j]
        return c
    #将原图中各个像素点通过累积概率转变为直方图均衡化后的图像
    def transToHistEq(c,img):
        image=img.copy()
        m,n=shape(img)
        for i in range(0,m):
            for j in range(0,n):
                image[i,j]=int(c[image[i,j]]*256)
        return image
    
    #读取图片,并转为灰度图像
    im=array(Image.open("E:/source.jpg").convert('L'))
    
    hist=computeHist(im)
    p=computeCDF(hist,im)
    c=histeq(p)
    img=transToHistEq(c,im)
    
    #array()的方向操作,使得后面能进行画图
    img=Image.fromarray(img)
    
    #原图
    figure()
    gray()
    imshow(im)
    axis('off')
    
    #均衡化后的图
    figure()
    gray()
    imshow(img)
    axis('off')
    show()
    
    展开全文
  • 直方图均衡化 c++

    热门讨论 2011-04-24 22:18:30
    直方图均衡化 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整...
  • 这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。 这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼...
  • 直方图均衡化、直方图变换、对比度自适应直方图均衡化
  • opencv直方图均衡化算法及实现

    千次阅读 2016-09-11 13:52:49
    1、为什么要直方图均衡化很多时候,我们的图片看起来的效果不是那么的清晰,这时候可以对图像进行一些处理来扩大图像像素值显示的范围。例如有些图像整体像素值偏低,图像中的一些特征看的不是很清晰,只是隐约看到...

    1、为什么要直方图均衡化

    很多时候,我们的图片看起来的效果不是那么的清晰,这时候可以对图像进行一些处理来扩大图像像素值显示的范围。例如有些图像整体像素值偏低,图像中的一些特征看的不是很清晰,只是隐约看到一些轮廓痕迹,这时可以经过图像直方图均衡化之后使得图像看起来亮一些,也便于后续的处理。直方图均衡化是灰度变换的一个重要应用,它高效且易于实现,广泛应用于图像增强处理中。图像的像素灰度变化是随机的,直方图的图形高低不齐,直方图均衡化就是用一定的算法使直方图大致平和的方法。

    2、opencv中直方图均衡化算法

    opencv中直方图均衡化算法的输入图像需为八位单通道图像,也就是灰度图像。若想要处计算彩色图像的均衡化图,可以先将图像用split函数进行通道分离,分别处理每一个通道的图像,在用merge函数进行合并。算法实现步骤如下:
    第一步:依次扫描原始灰度图像的每一个像素,计算出图像的直方图H。’
    第二步:进行归一化处理,即将0~255像素值的每一个像素值在图像中出现的次数除以图像的大小,得到归一化直方图。
    第三步:计算直方图积分,公式:这里写图片描述
    第四步:以H’作为查询表进行图像变换dst(x,y)=H’(src(x,y))

    c++代码:

    #include <opencv2\opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    
    int main()
    {
        Mat srcImg,grayImg;//声明原始图和灰度度
        srcImg = imread("1.jpg");//载入原始图
        if(!srcImg.data)
        {
            std::cout<<"请确认路径下存在图片";
            return -1;
        }
        imshow("原始图",srcImg);//显示原始图
        cvtColor(srcImg,grayImg,CV_RGB2GRAY);//将rgb图像转化为灰度图
        int rowNumber = grayImg.rows;//得到行
        int colNumber = grayImg.cols;//得到列
        int sumNumber = rowNumber*colNumber;//得到图像整个像素个数
        Mat dstImg(rowNumber,colNumber,CV_8UC1,Scalar(0,0,0));//初始化直方图均衡化后的图
        double hist[256] = {0.00};//直方图
        double dhist[256] = {0.00};//直方图归一化图
        double Dhist[256] = {0.00};//直方图积分图,每一个像素点
        for(int i = 0;i<rowNumber;i++)//遍历原始图像,得到直方图
        {
            uchar* data = grayImg.ptr<uchar>(i);
            for(int j = 0;j<colNumber;j++)
            {
                int temp = data[j];//得到图像像素值
                hist[temp] = hist[temp]+1;//将相应像素值在直方图中加1
            }
        }
    
        for(int i = 0;i<256;i++)//遍历直方图,得到归一化直方图和积分图
        {       
            dhist[i] = hist[i]/sumNumber;//得到归一化图
            for(int j = 0;j<=i;j++)
            {
                Dhist[i] = Dhist[i] + dhist[j]; //得到积分图
            }
        }
    
    
        for(int i = 0;i<rowNumber;i++)//以积分图为查找表得到均衡化后的图
        {
            uchar* data1 = dstImg.ptr<uchar>(i);
            uchar* data2 = grayImg.ptr<uchar>(i);
            for(int j = 0;j<colNumber;j++)
            {
                int temp1 = data2[j]; //查找到原始图相应位置的像素值
                int temp2 = (int)(Dhist[temp1]*255); //在积分图中找到相应像素值的映射值
                data1[j] = temp2;//将映射值赋值给目标图像相应值
            }
        }
        imshow("均衡化后的图",dstImg);
        waitKey(0);
        return 0;
    }

    效果图:
    原始图

    效果图

    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 3,792
精华内容 1,516
关键字:

直方图均衡化