昨天说了,今天要好好的来解释说明一下直方图均衡化。并且通过不调用histeq函数来实现直方图的均衡化。

  一、直方图均衡化概述

  直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较平的分段直方图:如果输出数据分段值较小的话,会产生粗略分类的视觉效果。[1]

  根据香农定理关于信息熵的定义:

  对于一副图像而言,当每一个灰度值分布更均衡,图像所包含的信息量是越大的;相反,仅仅只有一个灰度值的时候,信息量很少。这个是我们能够想来的比如:纯黑图像包含信息量很少,而其他图像我们可能会看到一些人物、景物。

  就效果而言,直方图均衡化使得图像信息量变大,但是不可能会发生较小的灰度值在经过均衡化后变得比原来较大的灰度值更大。这也就意味着,我们通过均衡化后的图所观察到的景物应当与原来图像所观察到的一致,只是颜色层次更清晰,更加具有辨识度。

  二、直方图均衡化公式推导

  (ps:今天一开始看了好多人的推导都觉得特别乱,思路比较混乱,最后自己沉下心来研究了一下,终于将推导思路理顺了,在下文进行呈现)

  现假定原图的直方图-灰度值关系为f(x),则累积灰度直方图应当是F(x),经过均衡化后的直方图-灰度值关系为f(y),其累积灰度直方图应当是F(y)。原灰度值x与后灰度值y之间存在某种映射关系:y=T(x)。

    

  方程两边对y求导:

    

  由于有:

    

  可得:

    

  方程两边积分:

    

  即

    

  对于离散值而言:

    

  三、直方图均衡化Matlab代码实现

clc;
clear;
RGB = imread('2.jpg'); % 读取彩色图
subplot(2,3,1);imshow(RGB);title('彩色图'); fx=rgb2gray(RGB);
subplot(2,3,2);imshow(fx);title('灰度图');
subplot(2,3,3);imhist(fx);title('灰度图'); [R, C] = size(fx); % 统计每个像素值出现次数
count = zeros(1, 256);
for i = 1 : R
for j = 1 : C
count(1, fx(i, j) + 1) = count(1, fx(i, j) + 1) + 1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%一下编写T函数[2]
T = zeros(1, 256);
T = double(T); count = double(count); % 统计每个像素值出现的概率, 得到概率直方图
for i = 1 : 256
T(1, i) = count(1, i) / (R * C);
end % 求累计概率,得到累计直方图
for i = 2 : 256
T(1, i) = T(1, i - 1) + T(1, i);
end % 完善T函数的定义
for i = 1 : 256
T(1, i) = T(1, i) * 255;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 完成每个像素点的映射
fy = double(fx);
for i = 1 : R
for j = 1 : C
fy(i, j) = T(1, fy(i, j) + 1);
end
end % 输出仍然要记得改数据类型
fy = uint8(fy);
subplot(2,3,5);imshow(fy);title('直方图均衡化');
subplot(2,3,6);imhist(fy);title('直方图均衡化');

 

参考文献:

[1] https://www.cnblogs.com/hustlx/p/5245461.html.

[2] https://blog.csdn.net/acmore_xiong/article/details/53183131.

2019-03-07

22:24:57

直方图均衡化与Matlab代码实现的更多相关文章

  1. 直方图均衡化及matlab实现

    在处理图像时,偶尔会碰到图像的灰度级别集中在某个小范围内的问题,这时候图像很难看清楚.比如下图: 它的灰度级别,我们利用一个直方图可以看出来(横坐标从0到255,表示灰度级别,纵坐标表示每个灰度级别的 ...

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

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

  3. matlab 直方图均衡化

    原理: 直方图均衡化首先是一种灰度级变换的方法: 原来的灰度范围[r0,rk]变换到[s0,sk]变换函数为:s=T(r); 为便于实现,可以用查找表(look-up table)的方式存储,即:原始 ...

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

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

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

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

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

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

  7. Matlab实现直方图均衡化

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

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

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

  9. 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码

    labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...

随机推荐

  1. querySelector与getElementBy的区别

    1,querySelector() 方法返回匹配指定 CSS 选择器元素的第一个子元素 . 该方法只返回匹配指定选择器的第一个元素.如果要返回所有匹配元素,需要使用 querySelectorAll( ...

  2. python3 文件读写操作中的文件指针seek()使用

    python中可以使用seek()移动文件指针到指定位置,然后读/写.通常配合 r+ .w+.a+ 模式,在此三种模式下,seek指针移动只能从头开始移动,即seek(x,0) . 模式 默认 写方式 ...

  3. 【感悟】一次不太好的寻找bug的体验,RecyclerView

    最近在网上看Android的学习视频的时候,视频中使用了RecyclerView这个组件,我按照视频中的指示对RecyclerView进行配置. 程序编译通过了,但是在运行时程序会崩溃.我复制了日志里 ...

  4. qs.stringify和JSON.stringify()

    var a = {name:'hehe',age:10}; qs.stringify(a) // 'name=hehe&age=10' JSON.stringify(a) // '{" ...

  5. jmeter之regular expression extractor ,并循环调用匹配到的多个值

    jmeter之regular expression extractor 官方介绍:http://jmeter.apache.org/usermanual/regular_expressions.htm ...

  6. webpack4.27.1中遇到的错误

    1:ERROR in Entry module not found: Error: Can't resolve './src' 我在使用webpack命令时报错,这时因为我的配置文件有问题webpac ...

  7. Springboot 学习教程(一):版本+ jdk 版本 + Maven 版本的匹配

    Spring boot 版本 Spring Framework jdk 版本 maven 版本 1.2.0 版本之前   6 3.0 1.2.0 4.1.3+ 6 3.2+ 1.2.1 4.1.3+ ...

  8. vghyj

    2017*****1012:我是康迪:我的爱好是计算机:我的码云个人主页是:https://gitee.com/kdkdkdkd我的第一个项目地址是:https://gitee.com/kdkdkdk ...

  9. 【心得】-NO.114.面试.1 -【To HR And Interviewer】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  10. xamarin.Android开发前的配置

    vs2019开发 入门教程 https://docs.microsoft.com/zh-cn/xamarin/android/get-started/installation/android-emul ...