原理:

直方图均衡化首先是一种灰度级变换的方法:

原来的灰度范围[r0,rk]变换到[s0,sk]变换函数为:s=T(r);

为便于实现,可以用查找表(look-up table)的方式存储,即:原始的灰度作为查找表的索引,表中的内容是新的灰度值。

其次,直方图均衡化是图像增强的一种基本方法,可提高图像的对比度,即:将较窄的图像灰度范围以一定规则拉伸至较大(整个灰度级范围内)的范围。

目的是在得到在整个灰度级范围内具有均匀分布的图像。

所以,当输入:直方图H(r)【此处指每个灰度级占有的像素数】;灰度级范围[r0,rk];目的是找到一个s=T(r)使得输出图像的直方图G(s)【同指】在整个灰度级范围内均匀分布。且需满足

(1)0—L(灰度范围)单调递增,避免黑白颠倒;

(2)0<r<L,时0<s<L,保持动态范围一致。

累积分布函数满足这几个要求。

\[\sum\limits_{i = 0}^k {G({s_i})}  = \sum\limits_{j = 0}^k {H({r_j})} \]

若图像有M*N个像素,则均衡化后的直方图G(q)就有均匀分布:

\[F = \frac{{NM}}{{{s_k} - {s_0}}}\]

代入上式:

\[NM\int\limits_{{s_0}}^s {\frac{1}{{{s_k} - {s_0}}}} ds = \frac{{NM(s - {s_0})}}{{{s_k} - {s_0}}} = \int\limits_{{r_0}}^r {H(r)} dr\]

则:

\[s = T(r) = \frac{{{s_k} - {s_0}}}{{NM}}\int\limits_{{r_0}}^r {H(r)} dr + {s_0}\]

转换成离散形式:

\[s = T(r) = \frac{{{s_k} - {s_0}}}{{NM}}\sum\limits_{{r_0}}^r {H(r)}  + {s_0}\]

一般\[{s_k} = 255,{s_0} = 0\]

自此就得到了与r相应的s。


matlab代码:

[filename,pathname]=uigetfile('*.*','select an image');
input_I=imread([pathname filename]);%读入图像 subplot(,,);imshow(input_I);
title('原始图像');%显示原始图像 I_gray = rgb2gray(input_I);
subplot(,,);imshow(I_gray);
title('灰度图像');
subplot(,,);imhist(I_gray);
title('灰度图像直方图');%显示灰度图像及直方图 [height,width]=size(I_gray); r=zeros(,);
for i=:height
for j=:width
r(I_gray(i,j)+)= r(I_gray(i,j)+)+;
end
end %计算灰度直方图中的数值:每个灰度级对应的像素数目。
subplot(,,);stem(r);
title('计算所得灰度图像直方图'); s=zeros(,);
s()=r();
for i=:
s(i)=s(i-)+r(i);
end %累积分布函数:对应的也是像素的数目。
subplot(,,);stem(s); for i=:
s(i)=floor(*s(i)/(height*width));
end % s(i)/(height*width) 为频率,* 为归一到0—255之间,floor为取整(整数部分)函数。【round为四舍五入函数,ceil为取整数部分加1】 I_HE=I_gray;
for i=:height
for j=:width
I_HE(i,j)= s(I_gray(i,j)+);
end
end%得到均衡化后的图像。s()~s()里的数值即为灰度值,~256标号对应的是原始灰度图像的0~255的灰度值。 m=zeros(,);
for i=:height
for j=:width
m(I_HE(i,j)+)= m(I_HE(i,j)+)+;
end
end %计算直方图中的数值:每个灰度级对应的像素数目。
subplot(,,);stem(m);
title('计算所得均衡化后图像直方图'); imwrite(I_gray,'1gray.png');
imwrite(I_HE,'1he.png');
subplot(,,);imshow(I_HE);
title('均衡化后的图像');
subplot(,,);imhist(I_HE);
title('均衡化后图像直方图');

结果:

问题

直方图确实拉伸了,人眼视觉上对比度也提升了,可是说好的均匀分布呢?

matlab 直方图均衡化的更多相关文章

  1. matlab 直方图均衡化(含rgb)

    步骤: 统计原图像素每个像素的个数 统计原图像<每个灰度级的像素的累积个数 家里灰度级得映射规则 将原图每个像素点的灰度映射到新图 代码: clear all I=imread('1.jpg') ...

  2. 彩色图像的直方图均衡化matlab代码

    彩色图像的直方图均衡化 - YangYudong2014的专栏 - CSDN博客 http://blog.csdn.net/yangyudong2014/article/details/4051503 ...

  3. 直方图均衡化与Matlab代码实现

    昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...

  4. 图像处理 Matlab实现线性点运算、非线性点运算、点运算与直方图、直方图均衡化

    今天,我们学习了直方图.于是乎,回来我就用matlab代码实现一下.昨天受到道路检测老师课上一个内容的影响(对于道路裂缝的检测,我突发奇想,如果对于道路图像进行操作,是否能够让裂缝与道路分离,使得图像 ...

  5. Matlab实现直方图均衡化

    G=imread('aini555.jpg'); I=rgb2gray(G); J=histeq(I); %直方图均衡化,这一个函数就可以做到均衡化的效果 figure, subplot(),imsh ...

  6. 直方图均衡化与直方图规定化的MATLAB实现

    目录 1.直方图均衡化 2.直方图规定化 @ 1.直方图均衡化 对图像进行非线性拉伸,重新分配图像像元值,使一定灰度范围内像元值的数量大致相等就是直方图的均衡化.原来直方图中间的峰顶部分对比度得到增强 ...

  7. MATLAB - 练习程序,直方图均衡化

    直方图均衡化的作用是图像增强. 有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布. 第一个问题.均衡化过程中,必须要保证两个条件:①像素无论怎么映射, ...

  8. 图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)

    一.图像增强算法原理 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...

  9. 对比度受限的自适应直方图均衡化(CLAHE)

    直方图均衡化(HE)是一种很常用的直方图类方法,基本思想是通过图像的灰度分布直方图确定一条映射曲线,用来对图像进行灰度变换,以达到提高图像 对比度的目的.该映射曲线其实就是图像的累计分布直方图(CDF ...

随机推荐

  1. mysqldump dump-slave

    http://blog.itpub.net/29254281/viewspace-1392757/ 查看从库的状态,发现从库的sql_thread进程会自动停止,停止之后 又会自动开启,没有人操作这个 ...

  2. BIOS 深入学习 转

    http://blog.csdn.net/lightseed/article/category/547391

  3. Mysql子查询IN中使用LIMIT

    学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...

  4. 基于jQuery带图标的多级下拉菜单

    之前为大家分享了很多导航菜单.今天我们要来分享一款很不错的jQuery左侧带小图标的多级下拉菜单,菜单是垂直的,每一个菜单项带有一个小图标,看起来非常专业.并且菜单支持无限极下拉,所以对各位Web开发 ...

  5. 关于Google Chorme中字体小于12px的问题

    问题:当字体大小设置成小于12px时,Google chrome中字体的大小始终显示为12px. 而其他浏览器则没有这个问题. 这时只需要在要改变字体大小的元素中添加 -webkit-transfor ...

  6. Android读取RAM,ROM,SD卡容量

    1)简介 一般人们在买手机的时候,在手机配置上都会出现"内存容量:512MB ROM+512MB RAM "等等类似这样的说明,可能很多人都知道RAM的意思就是运存的意思,但是对于 ...

  7. iOS - UI - UISegmentedControl

    1.UISegmentedControl NSArray * array = @[@"red",@"green",@"yellow",@&q ...

  8. Gstreamer基本概念介绍(开发前必读)

    1. 元件(Elements) 元件(element)是GStreamer中最重要的概念.你可以通过创建一系列的元件(Elements),并把它们连接起来,从而让数据流在这个被连接的各个元件(Elem ...

  9. hdu 3909 数独扩展

    思路:做法与9*9的一样.只不过是变量. #include<set> #include<map> #include<cmath> #include<queue ...

  10. 转:Android中Context详解 ---- 你所不知道的Context

    转:http://blog.csdn.net/qinjuning/article/details/7310620 转:http://blog.csdn.net/lmj623565791/article ...