`
xlover
  • 浏览: 244486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Matlab绘制直方图以及均衡化

阅读更多
直方图均衡化的英文名称是Histogram Equalization.
  图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
  直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
  缺点:
  1)变换后图像的灰度级减少,某些细节消失;
  2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
  直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
  这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
  这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度。
  直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
  (1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
  (2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致
性。
  累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为:
  gk = EQ(fk) = (ni/n) = pf(fi) ,
  (k=0,1,2,……,L-1)
  上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。


关于编程实现,同样是不调用matlab库函数,自己编程实现。这样可以更深刻地理解直方图均衡化技术,提高编程能力。

实现代码(matlab):
%直方图均衡化
I = imread('rice.png');
[height,width] = size(I);
figure
subplot(221)
imshow(I)%显示原始图像
subplot(222)
imhist(I)%显示原始图像直方图

%进行像素灰度统计;
NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
    for j = 1: width
        NumPixel(I(i,j) + 1) = NumPixel(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
    end
end
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256
    ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直方图分布
CumuPixel = zeros(1,256);
for i = 1:256
    if i == 1
        CumuPixel(i) = ProbPixel(i);
    else
        CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);
    end
end
%累计分布取整
CumuPixel = uint8(255 .* CumuPixel + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:height
    for j = 1: width
        I(i,j) = CumuPixel(I(i,j));
    end
end

subplot(223)
imshow(I)%显示原始图像
subplot(224)
imhist(I)%显示原始图像直方图


这段代码会报错:Function '+' is not defined for values of class 'uint8'.
意思是unit8这种数据类型不支持+运算,这可能是因为unit只支持1~256,所以在加之前只需用double()把想眼相应的数值转化为double型即可!
分享到:
评论

相关推荐

    利用matlab实现直方图均衡化

    以下是对如何使用 MATLAB 进行直方图均衡化的详细解释。 首先,我们来看如何用 MATLAB 显示图像的直方图。这段代码首先通过 `imread` 函数读取图像文件 '1.jpg',然后创建一个空数组 `hist` 来存储每个灰度级的像素...

    直方图均衡化-自实现与MATLAB对比_图像处理直方图均衡化MATLAB_

    7. **应用场合**:直方图均衡化常用于医学影像、遥感图像、天文图像等领域,以及一些低光照条件下的图像增强,使细节更加清晰可见。 8. **局限性与改进**:尽管直方图均衡化效果显著,但不适用于所有情况。对于已经...

    MATLAB图像直方图及均衡化处理报告.docx

    【MATLAB图像直方图及均衡化...通过这个实验,作者不仅了解了直方图和直方图均衡化的概念,还实践了MATLAB编程技巧,包括图像处理、循环结构、矩阵操作以及错误调试。这样的练习有助于提升对图像处理的理解和应用能力。

    用matlab-实现基于直方图均衡化的彩色图像增强.doc

    "基于直方图均衡化的彩色图像增强在 Matlab 中的实现" MatLab 是一种功能强大的开发语言,广泛应用于图像处理、信号处理、数据分析等领域。本文档介绍了基于直方图均衡化的彩色图像增强技术在 Matlab 中的实现。 ...

    基于matlab图像直方图均衡小程序

    总的来说,这段MATLAB代码展示了如何使用`histeq`函数进行图像的直方图均衡化,以及如何通过图像显示和直方图绘制来比较处理前后的效果。这种技术对于改善图像的整体对比度,特别是在低光照或复杂环境下的图像处理,...

    直方图均衡化 matlab

    本实验的重点是理解直方图均衡化的工作原理以及如何在MATLAB中进行实际操作。 直方图是统计图像中每个灰度级出现频率的图形表示,它可以帮助我们分析图像的灰度分布。在一幅图像中,如果灰度级的分布很集中,那么...

    直方图均衡_RGB图像直方图均衡_matlab_直方图_直方图均衡_图像matlab_

    本文将深入探讨RGB图像的直方图均衡化,以及如何使用MATLAB进行操作。 直方图是表示图像中像素值频率分布的一种图形,通过直方图可以直观地看出图像的亮暗区域分布。在低对比度图像中,直方图通常集中在某一亮度...

    MATLAB图像直方图及均衡化处理报告.pdf

    在MATLAB中,实现直方图均衡化主要分为以下步骤: 1. 计算原始图像的直方图,这与上述生成直方图的过程相同。 2. 计算累积分布函数(CDF),即将直方图的累计频数与总像素数进行归一化,得到一个0到1之间的连续函数...

    MATLAB.rar_matlab直方图_图像直方图_直方图 matlab_直方图 均衡_直方图均衡

    MATLAB是一款强大的数学计算软件,也提供了丰富的图像处理功能,包括直方图的计算和直方图均衡化。本教程将详细介绍如何在MATLAB中实现图像的灰度直方图与直方图均衡化。 首先,我们要理解什么是图像直方图。直方图...

    基于matlab的直方图均衡化代码

    直方图均衡化是一种图像处理技术,常用于增强图像的对比度,特别是对于那些灰度分布较为均匀的图像。在MATLAB中,我们可以利用编程实现这一过程。以下是对给定代码的详细解释: 首先,我们需要导入图像并进行预处理...

    matlab开发-直方图均衡和局部直方图均衡

    在MATLAB中,可以使用`imhist`函数来绘制图像的直方图,`histeq`函数来进行直方图均衡化。例如: ```matlab img = imread('input_image.jpg'); enhanced_img = histeq(img); ``` 这段代码首先读取名为'input_image...

    MATLAB直方图均衡化处理

    将图像在Matlab中打开并转换为灰度图像,计算其直方图。然后进行直方图均衡化处理,分别绘制均衡化处理前后这两幅图像的直方图和灰度图像。

    冈萨雷斯 数字图像处理(第三版)matlab代码 图3.20直方图均衡

    MATLAB作为一种强大的数值计算和可视化工具,提供了丰富的图像处理函数,如`imhist`用于绘制直方图,`histeq`用于执行直方图均衡化。在本压缩包中,包含了对应于图3.20的多个图像的直方图均衡化MATLAB代码。这些代码...

    直方图均衡化、直方图变换、对比度自适应直方图均衡化

    ### 直方图均衡化、直方图变换、对比度自适应直方图均衡化 #### 直方图均衡化(Histogram Equalization) 直方图均衡化是一种图像处理技术,主要用于增强图像的对比度,特别是在图像整体亮度较暗或者对比度较低的...

    关于matlab图像均衡化的实现.rar

    在Matlab中,我们可以使用`imhist`函数来绘制图像的直方图,`histeq`函数来进行直方图均衡化。下面是一个简单的步骤说明: 1. **读取图像**:使用`imread`函数读取图像文件,例如: ```matlab img = imread('原始...

    matlab图像技术:20 matlab直方图均衡化专题案例集.zip

    这个"matlab图像技术:20 matlab直方图均衡化专题案例集.zip"文件,显然包含了20个具体的MATLAB代码实例,用于深入理解和实践直方图均衡化的应用。 直方图均衡化的核心在于重新分布图像的灰度级,使得原本集中在某...

    matlab灰度图直方图均衡化代码.docx

    以下将详细介绍这个过程,以及如何使用MATLAB实现灰度图的直方图均衡化。 首先,我们需要理解直方图的概念。直方图是描述图像中各灰度级出现频率的图形,它由一系列柱状图组成,每个柱子的高度表示对应灰度级的像素...

    用matlab实现基于直方图均衡化的彩色图像增强.pdf

    基于Matlab实现的直方图均衡化彩色图像增强技术 Matlab是一种功能强大且广泛应用于科学计算、数据分析和图像处理的编程语言。基于Matlab平台,可以实现各种图像处理算法,其中包括基于直方图均衡化的彩色图像增强...

Global site tag (gtag.js) - Google Analytics