直方图均衡化

直方图均衡化Histogram Equalization

理论Theory

图像的直方图是什么What is an Image Histogram?

  • 直方图是图像中像素强度分布的图形表达方式It is a graphical representation of the intensity distribution of an image。
  • 它统计了每一个强度值所具有的像素个数It quantifies the number of pixels for each intensity value considered。


    图示

    如上图的灰度图,右图统计显示了左图中所有像素值的分布。

直方图均衡化是什么?

  • 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法It is a method that improves the contrast in an image, in order to stretch out the intensity range。
  • 说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中间图所示的直方图. 均衡化的图像见下面右图To make it clearer, from the image above, you can see that the pixels seem clustered around the middle of the available range of intensities. What Histogram Equalization does is to stretch out this range. Take a look at the figure below: The green circles indicate the underpopulated intensities. After applying the equalization, we get an histogram like the figure in the center. The resulting image is shown in the picture at right。
    图示

直方图均衡化是怎样做到的?How does it work?

  • 均衡化指的是把一个分布 (给定的直方图) 映射 到另一个分布 (一个更宽更统一的强度值分布), 所以强度值分布会在整个范围内展开Equalization implies mapping one distribution (the given histogram) to another distribution (a wider and more uniform distribution of intensity values) so the intensity values are spreaded over the whole range。
  • 要想实现均衡化的效果, 映射函数应该是一个 累积分布函数 (cdf) (更多细节, 参考学习OpenCV). 对于直方图H(i) , 它的 累积分布 H'(i)是:To accomplish the equalization effect, the remapping should be the cumulative distribution function (cdf) (more details, refer to Learning OpenCV). For the histogram H(i), its cumulative distribution H′(i) is:
    图示

理解

直方图均衡化的作用是图像增强。其过程是将图像的像素分布通过一种方法映射到另外一种分布上去,在该映射过程中主要使用了累积分布函数。累积分布函数用于描述随机变量的概率分布(F(x)=P(X<x)),该函数是递增的,并且值域分布范围是0-1,假如我们要处理的图像是灰度图,它的像素值分布在0-255,可以与0-1对应起来。因此使用累积分布函数按照某种方法来映射可以保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不会明暗颠倒。
先来看一个实例。
假设有如下图像:



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


映射后的图像如下所示:


由上述实例我们可以看到,将像素值转换为另一个像素值,并且原来的大小关系并没有改变,但是直画出方图的话,会发现直方图变缓了。

例程Code

  • 这个例程是用来干嘛的?What does this program do?
    加载源图像Loads an image
    把源图像转为灰度图Convert the original image to grayscale
    使用OpenCV函数 EqualizeHist 对直方图均衡化Equalize the Histogram by using the OpenCV function cv::equalizeHist
    在窗体中显示源图像和均衡化后图像Display the source and equalized images in a window.
  • 例程一瞥Code at glance:
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main( int, char** argv )
{
    Mat src, dst;
    const char* source_window = "Source image";
    const char* equalized_window = "Equalized Image";
    src = imread( argv[1], IMREAD_COLOR );
    if( src.empty() )
    { 
        cout<<"Usage: ./EqualizeHist_Demo <path_to_image>"<<endl;
        return -1;
    }
    cvtColor( src, src, COLOR_BGR2GRAY );
    equalizeHist( src, dst );
    namedWindow( source_window, WINDOW_AUTOSIZE );
    namedWindow( equalized_window, WINDOW_AUTOSIZE );
    imshow( source_window, src );
    imshow( equalized_window, dst );
    waitKey(0);
    return 0;
}

说明

1、声明原图和目标图以及窗体名称:Declare the source and destination images as well as the windows names:

Mat src, dst;
char* source_window = "Source image";
char* equalized_window = "Equalized Image";

2、加载源图像:Load the source image:

src = imread( argv[1], 1 );
if( !src.data )
{ 
    cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;
    return -1;
}

3、转为灰度图:Convert it to grayscale:

cvtColor( src, src, CV_BGR2GRAY );

4、利用函数 equalizeHist 对上面灰度图做直方图均衡化:Apply histogram equalization with the function cv::equalizeHist :

equalizeHist( src, dst );

可以看到, 这个操作的参数只有源图像和目标 (均衡化后) 图像.As it can be easily seen, the only arguments are the original image and the output (equalized) image。

5、显示这两个图像 (源图像和均衡化后图像) :Display both images (original and equalized) :

namedWindow( source_window, CV_WINDOW_AUTOSIZE );
namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
imshow( equalized_window, dst );

6、等待用户案件退出程序Wait until user exists the program

waitKey(0);
return 0;

结果

1、为了更好地观察直方图均衡化的效果, 我们使用一张对比度不强的图片作为源图像输入, 如下图:To appreciate better the results of equalization, let's introduce an image with not much contrast, such as:

它的直方图为:which, by the way, has this histogram:

注意到像素大多集中在直方图中间的强度上.notice that the pixels are clustered around the center of the histogram.

2、使用例程进行均衡化后, 我们得到下面的结果After applying the equalization with our program, we get this result:

这幅图片显然对比度更强. 再验证一下均衡化后图片的直方图this image has certainly more contrast. Check out its new histogram like this:


注意到现在像素在整个强度范围内均衡分布Notice how the number of pixels is more distributed through the intensity range.

翻译者

zhlifly@ OpenCV中文网站 <zhlifly@gmail.com>

参考

直方图均衡化的数学原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容

  • 图像直方图(英语:Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像...
    fengzhizi715阅读 9,965评论 1 6
  • about 本文参考了 sunny2038同学的OpenCV Python教程(1、图像的载入、显示和保存) jn...
    庞贝船长阅读 21,665评论 0 5
  • 之前在用LBP做单样本人脸识别的时候,对于光照角度太大或者光线太暗的情况并不是很好,出错的概率还是很大,老师推荐用...
    Mikito_k阅读 752评论 0 1
  • 概念:通过拉伸像素强度分布范围来增强图像对比度的一种方法,如下图,将左边直方图的中间的一些强度值拉伸,对绿色椭圆部...
    冻冻妖阅读 667评论 0 0
  • 先来看看直方图均衡化的效果图。 直观感受,均衡化后的图像明暗对比更明显。亮的地方更亮,暗的地方更暗,拉开了差距。1...
    ck2016阅读 10,065评论 0 4