图像直方图的均衡化处理图的均衡化
图像处理6灰度直方图和直方图均衡化
图像处理6灰度直⽅图和直⽅图均衡化灰度直⽅图介绍灰度直⽅图(Gray histogram)是关于灰度级分布的函数,是对图像中灰度级分布的统计。
灰度直⽅图是将数字图像中的所有像素,按照灰度值的⼤⼩,统计其出现的频率。
灰度直⽅图是灰度级的函数,它表⽰图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。
如果将图像总像素亮度(灰度级别)看成是⼀个随机变量,则其分布情况就反映了图像的统计特性,这可⽤probability density function (PDF)来刻画和描述,表现为灰度直⽅图。
实现以下代码便于理解灰度直⽅图的计算,其中histogram函数是基于numpy简化的,运⾏结果如下。
# coding: utf8from skimage import dataimport matplotlib.pyplot as pltimport numpy as npdef histogram(a, bins=10, range=None):"""Compute the histogram of a set of data."""import numpy as npfrom numpy.core import linspacefrom numpy.core.numeric import (arange, asarray)# 转成⼀维数组a = asarray(a)a = a.ravel()mn, mx = [mi + 0.0 for mi in range]ntype = np.dtype(np.intp)n = np.zeros(bins, ntype)# 预计算直⽅图缩放因⼦norm = bins / (mx - mn)# 均分,计算边缘以进⾏潜在的校正bin_edges = linspace(mn, mx, bins + 1, endpoint=True)# 分块对于⼤数组可以降低运⾏内存,同时提⾼速度BLOCK = 65536for i in arange(0, len(a), BLOCK):tmp_a = a[i:i + BLOCK]tmp_a_data = tmp_a.astype(float)# 减去Range下限,乘以缩放因⼦,向下取整tmp_a = tmp_a_data - mntmp_a *= normindices = tmp_a.astype(np.intp)# 对indices标签分别计数,标签等于bins减⼀indices[indices == bins] -= 1n += np.bincount(indices, weights=None,minlength=bins).astype(ntype)return n, bin_edgesif__name__ =="__main__":img=data.coffee()fig = plt.figure()f1 = fig.add_subplot(141)f1.imshow(img)f1.set_title("image")f2 = fig.add_subplot(142)arr=img.flatten()n, bins, patches = f2.hist(arr, bins=256, facecolor='red')f2.set_title("plt_hist")f3 = fig.add_subplot(143)hist, others = np.histogram(arr, range=(0, arr.max()), bins=256)f3.plot(others[1:],hist)f3.set_title("np_hist1")f4 = fig.add_subplot(144)hist, others = histogram(arr, range=(0, arr.max()), bins=256)f4.plot(others[1:], hist)f4.set_title("np_hist2")plt.show()关于bincount函数,可以参考Xurtle的博⽂https:///xlinsist/article/details/51346523bin的数量⽐x中的最⼤值⼤1,每个bin给出了它的索引值在x中出现的次数。
图像处理中直方图均衡化的使用教程
图像处理中直方图均衡化的使用教程图像处理中的直方图均衡化是一种常用的增强图像对比度的方法。
通过对图像的像素值进行重新分布,直方图均衡化可以使图像中的明暗区域更具有对比度,从而提高图像的质量和清晰度。
本文将介绍直方图均衡化的原理、应用场景以及具体的步骤。
1. 直方图均衡化的原理直方图均衡化的原理基于对图像的灰度级进行重新分布。
它通过将原始图像的像素值映射到新的像素值上,使得直方图在整个灰度范围内得到均匀分布。
这样就能够增强图像中的低对比度区域,提高图像的视觉效果。
2. 直方图均衡化的应用场景直方图均衡化在图像处理领域有着广泛的应用。
下面列举了一些常见的应用场景:- 增强图像的对比度:直方图均衡化可以使得图像中的亮度值更加均匀分布,提高图像的对比度,使得图像变得更加清晰。
- 增强图像的细节:直方图均衡化通过增强图像中的低对比度区域,可以使得细节更加显著,提高图像的可视化效果。
- 降低图像的噪声:直方图均衡化可以将图像中的噪声分布均匀化,从而减少噪声对图像质量的影响。
3. 直方图均衡化的步骤下面是使用直方图均衡化对图像进行处理的具体步骤:步骤 1: 将彩色图像转换为灰度图像如果原始图像是彩色图像,我们需要将其转换为灰度图像。
这是因为直方图均衡化是针对灰度级进行处理的。
步骤 2: 计算原始图像的像素值分布使用图像处理工具,计算原始图像中每个像素值的出现频率。
这样可以得到一个直方图,该直方图显示了原始图像中像素值的分布情况。
步骤 3: 计算累积分布函数通过对原始图像的直方图进行累积求和,得到一个累积分布函数。
该函数显示了每个像素值的累积出现频率。
步骤 4: 计算新的像素值根据累积分布函数,计算每个像素值的新的映射像素值。
这个计算公式可以根据具体的图像处理工具而有所不同。
步骤 5: 创建均衡化后的图像使用新的像素值替换原始图像中的像素值,将得到的图像称为均衡化后的图像。
4. 注意事项在使用直方图均衡化时,需要考虑以下几个注意事项:- 直方图均衡化可能会改变图像的整体亮度。
图像直方图均衡化原理
图像直方图均衡化原理
图像直方图均衡化是一种常用的图像增强方法,通过调整图像的像素灰度分布,使得图像的对比度增强、细节更加清晰。
其原理主要分为以下几个步骤:
1. 统计像素灰度值的分布:首先,对待处理的图像,统计每个灰度级别的像素点数量,得到原始图像的灰度直方图。
2. 计算累计分布函数:根据灰度直方图,计算每个灰度级别对应的累计分布函数,即该灰度级别及其之前的像素点的累积数量比例。
3. 灰度映射:对于每个像素点,将其灰度值通过累计分布函数进行映射,得到新的灰度值。
通常情况下,可以通过线性映射或非线性映射来实现,使得图像的灰度分布变得更加均匀。
4. 重构图像:将经过灰度映射处理后的灰度值替换原始图像中的对应像素点的灰度值,从而得到均衡化后的图像。
通过图像直方图均衡化处理,可以提高图像的对比度,使暗部和亮部细节更加突出,同时抑制了图像中灰度级别分布不均匀的问题。
这种方法在图像增强、图像分析等领域都有广泛应用。
图像直方图的均衡化处理图的均衡化
图像直⽅图的均衡化处理图的均衡化图像直⽅图的均衡化处理⼀,技术要求1.1,利⽤matlab提供的函数处理 (2)1.2,利⽤matlab⾃⾏编辑代码处理 (3)⼆,基本原理 (3)2.1,直⽅图的均衡化 (3)2.2,直⽅图的标准化 (3)三,建⽴模型描述 ......................................................................... 3~43.1,利⽤matlab提供的函数处理 (4)3.2,利⽤matlab⾃⾏编辑代码 (4)四,源程序代码 ............................................................................. 5~64.1,绘制图像直⽅图的代码 (5)4.2,绘制图像均衡化后直⽅图的代码 (5)4.3,显⽰均衡化后图像的代码 (6)五,调试过程及结论 ..................................................................... 6~85.1,在编辑窗⼝键⼊绘制直⽅图的源代码得到的输出结果为图2 (6)5.2,利⽤matlab函数绘制的图像直⽅图标准化的输出结果如图3..75.3,直⽅图均衡化输出结果如图4所⽰。
(8)六,⼼得体会 (9)七,参考⽂献 (9)图像直⽅图的均衡化处理⼀,技术要求1.1,利⽤matlab提供的函数处理利⽤matlab提供的函数画出⼀幅图像的直⽅图,对其进⾏均衡化和标准化处理,并⽐较均衡化(标准化)后图像和原图像的区别。
1.2,利⽤matlab⾃⾏编辑代码处理利⽤matlab⾃⾏编辑代码,实现⼀幅图像的直⽅图显⽰和均衡化的处理,同样⽐较处理前后两幅图像的区别,了解图像均衡化的效果和实际运⽤。
⼆,基本原理直⽅图是多种空域处理技术的基础。
它能有效的⽤于图像增强。
直方图的均衡化
射关系。重复上述步骤,得到所有的原图像各灰度级到目标图像各灰
度级的映射关系,再按照新的映射关系对原图像各点像素进行灰度转
换,即可完成对原图的直方图均衡化。下面例题是按照上述算法实现
的。
1.为什么cdf是均衡化的变化函数
tk EH
sk
k i0
ni n
k i0
ps (si )
0 sk 1
k=0,1,…L-1
公式(2)
根据该方程可以由原图像的各像素灰度值直接得到直方图均衡化后各 像素的灰度值。
在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并
计算出原始直方图分布,然后根据计算出的累计直方图分布 tk ,按式
仙也。名之者/谁?太守/自谓也。太守与客来饮/于此,饮少/辄醉,而/年又最高,故/自号曰/醉翁也。醉翁之意/不在酒,在乎/山水之间也。山水之乐,得之心/而寓之酒也。节奏划分思考“山行/六七里”为什
么不能划分为“山/行六七里”?
明确:“山行”意指“沿着山路走”,“山行”是个状中短语,不能将其割裂。“望之/蔚然而深秀者”为什么不能划分为“望之蔚然/而深秀者”?明确:“蔚然而深秀”是两个并列的词,不宜割裂,“望
形成一片浓荫,秋天风高气爽,霜色洁白,冬日水枯而石底上露,如此,就是山中的四季。【教学提示】翻译有直译与意译两种方式,直译锻炼学生用语的准确性,但可能会降低译文的美感;意译可加强译
文的美感,培养学生的翻译兴趣,但可能会降低译文的准确性。因此,需两种翻译方式都做必要引导。全文直译内容见《我的积累本》。目标导学四:解读文段,把握文本内容1.赏析第一段,说说本文是如
《直方图的均衡化》课件
直方图均衡化的效果评估
直方图均衡化的效果可以通过比较处理前后的直方图、对比度和视觉效果来 评估,通常希望处理后的图像具有更均匀的像素值分布和更好的对比度。
结论和总结
直方图的均衡化是一种有效的图像增强技术,在图像处理和计算机视觉中具有广泛的应用,能够改善图 像的质量和视觉效果。
《直方图的均衡化》PPT 课件
直方图的均衡化是什么
直方图的均衡化是一种图像增强技术,通过调整图像的亮度分布,使得图像中的像素值更均匀地分布在 整个灰度范围内,从而改善图像的对比度和视觉效果。
直方图的基本概念
直方图是用于表示图像中像素值分布的统计图,横坐标表示像素值,纵坐标 表示该像素值对应的像素数量。
直方图的均衡化原理
直方图均衡化的原理是通过对图像的像素值进行变换,使得原始图像的像素值分布更均匀,同时增强图 像的对比度。
直Байду номын сангаас图均衡化的应用场景
直方图均衡化广泛应用于图像增强、图像处理、计算机视觉等领域,可以改 善图像的质量、增强图像的细节和对比度。
直方图均衡化的步骤
直方图均衡化的步骤包括计算原始图像的像素值累计分布函数、对像素值进 行映射,以及将映射后的像素值替换到原始图像中。
图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)
图像处理基础(8):图像的灰度直⽅图、直⽅图均衡化、直⽅图规定化(匹配)本⽂主要介绍了灰度直⽅图相关的处理,包括以下⼏个⽅⾯的内容:利⽤OpenCV 计算图像的灰度直⽅图,并绘制直⽅图曲线直⽅图均衡化的原理及实现直⽅图规定化(匹配)的原理及实现图像的灰度直⽅图⼀幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的⼀个重要特征。
图像的灰度直⽅图就描述了图像中灰度分布情况,能够很直观的展⽰出图像中各个灰度级所占的多少。
图像的灰度直⽅图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。
不过通常会将纵坐标归⼀化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。
灰度直⽅图的计算公式如下:p (r k )=n kMN其中,r k 是像素的灰度级,n k 是具有灰度r k 的像素的个数,MN 是图像中总的像素个数。
OpenCV 灰度直⽅图的计算直⽅图的计算是很简单的,⽆⾮是遍历图像的像素,统计每个灰度级的个数。
在OpenCV 中封装了直⽅图的计算函数calcHist ,为了更为通⽤该函数的参数有些复杂,其声明如下:void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims, const int* histSize,const float** ranges, bool uniform = true, bool accumulate = false );该函数能够同时计算多个图像,多个通道,不同灰度范围的灰度直⽅图.其参数如下:images ,输⼊图像的数组,这些图像要有相同⼤⼤⼩,相同的深度(CV_8U CV_16U CV_32F ).nimages ,输⼊图像的个数channels ,要计算直⽅图的通道个数。
C语言数字图像处理之直方图均衡化
C语⾔数字图像处理之直⽅图均衡化本⽂实例为⼤家分享了C语⾔直⽅图均衡化的具体代码,供⼤家参考,具体内容如下原理直⽅图均衡化(Histogram Equalization) ⼜称直⽅图平坦化,实质上是对图像进⾏⾮线性拉伸,重新分配图像象元值,使⼀定灰度范围内象元值的数量⼤致相等。
这样,原来直⽅图中间的峰顶部分对⽐度得到增强,⽽两侧的⾕底部分对⽐度降低,输出图像的直⽅图是⼀个较平的分段直⽅图:如果输出数据分段值较⼩的话,会产⽣粗略分类的视觉效果。
直⽅图是表⽰数字图像中每⼀灰度出现频率的统计关系。
直⽅图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图像的平均明暗和对⽐度等概貌性描述。
灰度直⽅图是灰度级的函数, 反映的是图像中具有该灰度级像素的个数, 其横坐标是灰度级r, 纵坐标是该灰度级出现的频率( 即像素的个数) pr( r) , 整个坐标系描述的是图像灰度级的分布情况, 由此可以看出图像的灰度分布特性, 即若⼤部分像素集中在低灰度区域, 图像呈现暗的特性; 若像素集中在⾼灰度区域, 图像呈现亮的特性。
灰度数字图像是每个像素只有⼀个采样颜⾊的图像。
这类图像通常显⽰为从最暗⿊⾊到最亮的⽩⾊的灰度。
灰度图像与⿊⽩图像不同,在计算机图像领域中⿊⽩图像只有⿊⽩实现流程:1)统计每个灰度级像素点的个数2)计算灰度分布密度3)计算累计直⽅图分布4)累计分布取整,保存计算出来的灰度映射关系处理图⽚规格800*600 8位灰度单通道原图直⽅图均衡化分析:本次实验中,我故意把原图调暗,进⾏直⽅图均衡化后可以明显感受到整幅图像亮度增⼤了,⽽且某些细节⽅⾯更加突出。
出现问题最初进⾏直⽅图均衡化时,输出结果如下:经分析,是没有对数组初始化置零导致的。
Hist数组是进⾏⼀个统计像素点个数的数组,最初倘若不置零,结果必然毫⽆意义。
故⽽添加数组内存置零的操作:经测试,问题解决。
附代码#include <stdio.h>#include <stdlib.h>#include <memory.h>#define height 600#define width 800typedef unsigned char BYTE; // 定义BYTE类型,占1个字节int main(void){FILE *fp = NULL;//BYTE Pic[height][width];BYTE *ptr;BYTE **Pic = new BYTE *[height];for (int i = 0; i != height; ++i){Pic[i] = new BYTE[width];}fp = fopen("weiminglake_huidu.raw", "rb");ptr = (BYTE*)malloc(width * height * sizeof(BYTE));//创建内存for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){fread(ptr, 1, 1, fp);Pic[i][j] = *ptr; // 把图像输⼊到2维数组中,变成矩阵型式ptr++;}}fclose(fp);int hist[256];float fpHist[256];float eqHistTemp[256];int eqHist[256];int size = height *width;int i, j;memset(&hist, 0x00, sizeof(int) * 256);memset(&fpHist, 0x00, sizeof(float) * 256);memset(&eqHistTemp, 0x00, sizeof(float) * 256);for (i = 0; i < height; i++) //计算差分矩阵直⽅图直⽅图统计每个灰度级像素点的个数{for (j = 0; j < width; j++){unsigned char GrayIndex = Pic[i][j];hist[GrayIndex] ++;}}for (i = 0; i< 256; i++) // 计算灰度分布密度{fpHist[i] = (float)hist[i] / (float)size;}for (i = 0; i< 256; i++) // 计算累计直⽅图分布{if (i == 0){eqHistTemp[i] = fpHist[i];}else{eqHistTemp[i] = eqHistTemp[i - 1] + fpHist[i];}}//累计分布取整,保存计算出来的灰度映射关系for (i = 0; i< 256; i++){eqHist[i] = (int)(255.0 * eqHistTemp[i] + 0.5);}for (i = 0; i < height; i++) //进⾏灰度映射均衡化{for (j = 0; j < width; j++){unsigned char GrayIndex = Pic[i][j];Pic[i][j] = eqHist[GrayIndex];}}fp = fopen("output.raw", "wb");for (i = 0; i < height; i++){for (j = 0; j < width; j++){fwrite(&Pic[i][j], 1, 1, fp);}}fclose(fp);return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
数字图像处理中的直方图均衡化使用注意事项
数字图像处理中的直方图均衡化使用注意事项直方图均衡化是一种通过分布调整来改善图像对比度的方法。
它通过重新分布图像的像素值以增强其视觉效果。
在数字图像处理中,直方图均衡化是一项常用的技术,但在使用过程中需要注意以下几个方面。
首先,直方图均衡化可能会导致图像细节丢失的问题。
因为直方图均衡化会根据像素值的分布进行调整,从而扩展像素值的范围,使得亮度范围更广。
但这也可能导致低对比度区域的细节消失,从而影响图像细节。
因此,在进行直方图均衡化时,应该密切关注图像的细节信息,尽量避免过度调整图像的对比度。
其次,直方图均衡化可能引起噪声的增加。
在直方图均衡化的过程中,图像的亮度分布被调整,可能会增加图像的噪声。
这是因为噪声通常与图像的低亮度区域有关,当低亮度区域被调整时,噪声也可能被放大。
为了减少噪声的影响,可以在均衡化之前对图像进行去噪处理,或者采用自适应的直方图均衡化方法,以避免过度增加图像噪声。
另外,直方图均衡化也可能导致图像的颜色失真问题。
因为直方图均衡化是基于像素值的灰度分布进行调整,对彩色图像来说,它可能会改变图像的颜色分布,从而造成颜色失真。
为了避免这种情况,可以在进行直方图均衡化前将图像转换为HSV颜色空间,并只对亮度(Value)通道进行均衡化,这样可以避免颜色的偏移。
此外,直方图均衡化的效果可能受到图像的动态范围限制。
在某些情况下,图像的动态范围可能不足以支持完整的直方图均衡化。
比如,当图像的某些区域非常亮或非常暗时,直方图可能会在动态范围两端产生剧烈的波动,从而导致图像的细节丢失或噪声增加。
为了解决这个问题,可以采用自适应的直方图均衡化方法,以根据图像的局部动态范围来进行调整,减少对整体图像的影响。
最后,直方图均衡化的选择需要根据具体的应用需求来确定。
直方图均衡化可以改善图像的对比度,使图像更加清晰和易于处理。
但对于一些特定的图像处理任务,如目标检测、图像识别等,直方图均衡化可能并不适用。
图像直方图均衡的标准化与规定化处理
图像直方图均衡的标准化处理均衡化基本原理:对在图像中像素个数多的灰度值(即对画面其主要作用的灰度值)进行展宽,而对像素个数少的灰度值进行归并,从而达到清晰图像的目的。
代码:img=imread('tim.jpg');figure,imshow(img);[m,n]=size(img); %测量图像尺寸参数h=zeros(1,256) %预创建存放灰度出现概率的向量for k=0:255h(k+1)=length(find(img==k))/(m*n);endfigure,bar(0:255,h,'k') %绘制直方图title('原图像直方图')xlabel('灰度值')ylabel('出现概率')S1=zeros(1,256);for i=1:256for j=1:iS1(i)=h(j)+S1(i); %计算SkendendS2=round(S1*256); %将Sk归到相近级的灰度for i=1:256heq(i)=sum(h(find(S2==i))); %显示均衡化后的直方图endfigure,bar(0:255,heq,'k') %显示灰度变化曲线title('均衡化后的直方图')xlabel('灰度值')ylabel('出现概率')figure,plot(0:255,S2,'r') %显示灰度变化曲线legend('灰度变化曲线')xlabel('原图像灰度级')ylabel('均衡化后灰度级')TR=img;for i=0:255TR(find(img==i))=S2(i+1); %将各个像素归一化后的灰度值付给这个像素endfigure,imshow(TR) %将各个像素归一化后的灰度值赋给这个像素 title('均衡化后图像')imwrite(TR,'tim.jpg');实验效果图:原图像原图像直方图标准化后图像标准化后直方图:灰度变化曲线图像直方图均衡的规定化处理直方图规定化的基本原理:有目的地增强某个灰度区间的图像,即能够人为地修正直方图的形状,使之与期望的形状相匹配。
直方图均衡化的本质和作用
具体实现方法是首先计算每个像素点周围的局部阈值, 然后根据阈值将像素点的灰度值分为两类或多类,最 后对每类像素点进行直方图均衡化。
优点是能够更好地处理具有特定分布和噪声的图像; 缺点是计算复杂度较高,且阈值的选择对结果影响较
大。
感谢您的观看
THANKS
01
直方图均衡化通过拉伸图像的对比度,使得图像的 细节更加突出,提高了图像的视觉效果。
02
通过扩展像素值的动态范围,直方图均衡化使得图 像中的亮部和暗部细节都得到更好的展示。
03
对比度的提高有助于增强图像的层次感和立体感, 使得图像更加生动逼真。
增强图像的细节信息
01 直方图均衡化通过拉伸像素值的动态范围,使得 图像中的细节信息得到更好的展示。
02 对于低对比度图像,直方图均衡化能够增强其细 节表现,提高图像的分辨率。
03 在医学影像、卫星遥感等领域,增强细节信息对 于后续的分析和识别至关重要。
改善图像的视觉效果
01
直方图均衡化能够改善图像的视觉效果,使得图像更加清晰、 自然。
02
通过调整像素值的分布,直方图均衡化能够消除图像中的噪声
和干扰,提高图像的质量。
直方图均衡化的本质和作用
目 录
• 直方图均衡化的定义 • 直方图均衡化的本质 • 直方图均衡化的作用 • 直方图均衡化的优缺点 • 直方图均衡化的实现方法
01
直方图均衡化的定义
直方图均衡化的概念
直方图均衡化是一种图像处理技术, 通过拉伸图像的灰度直方图,使其均 匀分布在整个灰度级别范围内,从而 提高图像的对比度和动态范围。
改善视觉效果有助于提高图像的辨识度和可读性,使得图像更
03
加易于分析和处理。
图像处理:数字图像的灰度直方图均衡化
图像处理:数字图像的灰度直方图均衡化简介在数字图像处理中,灰度直方图均衡化是一种常用的图像增强技术。
它通过重新分配图像中各个灰度级的像素值,使得最终的灰度直方图呈现出更均匀分布的特点,从而提高图像的对比度和视觉效果。
原理灰度直方图是描述一幅图像中每个灰度级出现频次的统计直方图。
在灰度直方图均衡化过程中,首先需要计算原始图像的累积概率密度函数(CDF),然后利用CDF进行线性变换将原始像素值映射到新的像素值上。
这个线性变换可以通过以下公式表示:G' = (G_max - G_min) \times CDF(G) + G_min其中G'是新的像素值,G是原始的像素值,G_max和G_min分别为像素值范围最大和最小值,而CDF(G)则是原始图像中小于或等于G的累积概率密度函数。
实现步骤1.读取待处理的数字图像。
2.将彩色或多通道图转化为灰度图。
3.计算原始灰度图像的像素值的频次统计,得到原始灰度直方图。
4.计算原始灰度直方图的累积概率密度函数。
5.根据累积概率密度函数进行线性变换,将原始像素值映射到新的像素值上。
6.生成处理后得到的均衡化后的图像。
7.输出均衡化后的图像。
应用场景灰度直方图均衡化在许多领域都有广泛应用,例如医学影像分析、计算机视觉和数字摄影等。
其主要作用是增强图像对比度、改善细节和提升视觉效果。
同时,该技术也能够在一些特定场景下帮助识别和检测对象。
总结通过使用灰度直方图均衡化技术,可以使得数字图像中各个灰度级的像素值更加均匀分布,从而提高图像对比度和视觉效果。
这种方法在数字图像处理中具有广泛的应用,并且简单易实现。
然而,需要注意的是,在某些特定情况下,采用该方法可能会产生过度增强或引入噪声等问题,因此在实际应用中需要谨慎使用并结合其他处理方法进行综合处理。
直方图均衡化
直方图均衡化目录1设计方案及功能描述 (1)2实现步骤 (3)3部分主要程序代码 (3)4运行结果 (7)5总结心得 (9)1设计方案及功能描述1.1 直方图均衡化图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。
直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。
直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。
这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。
这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。
设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。
直方图均衡化方法
直方图均衡化方法
直方图均衡化是一种用来增强图像对比度的技术,它通过重新分布图像像素的灰度级来拉伸图像的动态范围。
下面介绍一种基本的直方图均衡化方法:
1. 计算原始图像的灰度直方图:统计每个灰度级出现的像素数量。
2. 计算原始图像的累积分布函数(CDF):将每个灰度级的像素数量加到前一个灰度级的像素数量上,得到一个累积的像素数量曲线。
3. 计算均衡化后的累积分布函数:将CDF映射到新的像素值范围上,通常是0到255。
4. 计算均衡化后的灰度级映射表:将均衡化后的CDF映射到0到255的范围上。
5. 根据映射表,对原始图像的每个像素进行像素值替换:将原始像素值替换为对应的均衡化后的像素值。
6. 输出均衡化后的图像。
通过这个方法,直方图均衡化可以使得图像的像素值更均匀地分布在整个灰度级范围内,从而增强图像的对比度。
直方图均衡化
图像的灰度直方图是一个1-D的离散函数
h h ((ff)) n nf f ff 0, 0, 1, 1, ,, L L 1 1
灰度累积直方图也是一个1-D的离散函数
c( f ) n i
i 0 f
f 0, 1,
, L 1
直方图均衡化
直方图均衡化主要用于增强动态范围偏小的图像 的反差。
直方图均衡化
原始图像各灰度级对应的概率分布
例
灰度级
0
1
2
3
4
5
6
7
像素
概率
790
1023 850
656
329
245
122
0.03
81
0.02
0.19 0.25
0.21 0.16
0.08 0.06
18
直方图均衡化
图像直方图均衡化过程如下:
(1)得到变换后的值:
例解:
t 0 T ( s0 ) t1 T (s1 )
我们注意到在暗色的图像中,直 方图的组成成分集中在灰度级低 (暗)的一侧;反之,明亮的图 像的直方图的组成成分则集中在 灰度级高(亮)的一侧;动态范 围小,也就是对比度小,这种图 像直方图集中于灰度级的中部; 动态范围正常的图像直方图的成 分覆盖了灰度级很宽的范围。 直观上,若一图像像素占有全部 可能的灰度级并且分布均匀,则 图像有高的对比度和多变的灰度 色调,即,可通过改变直方图的 形状来达到增强图像对比度。
nk Pr ( rk ) 0 rk 1 n k 0, 1, 2 , , l 1
式中,nk为图像中出现rk 这种灰度的像素数,n 是 图像中像素总数,而 n k 就是概率论中所说的频数。 n 在直角坐标系中作出 rk 与Pr(rk) 的关系图形,这个图 形称为直方图。
【数字图像处理】直方图均衡化
【数字图像处理】直⽅图均衡化全局直⽅图均衡化直⽅图均衡化通过调整图像的直⽅图来增强图像的对⽐度,经常使⽤在医学图像分析中。
例如⼀幅8*8图像像素值如下:对各个像素值进⾏计数:得到累计概率分布:其中均衡化后的像素值计算公式为:前⾯的标题全局直⽅图均衡化,代表着直⽅图在整个图像计算,这样会有⼀个缺点,图像的部分区域会显得过暗或者过亮。
这个时候就需要使⽤⾃适应直⽅图均衡化(Adaptive histogram equalization)。
⾃适应直⽅图均衡化,⾸先将图像分为⼏个部分,然后对每个部分分别计算直⽅图进⾏均衡化,同时对边缘像素进⾏插值处理。
由图中可以看出⾃适应直⽅图均衡化对⾼亮区域的处理要⽐常规的直⽅图均衡化好的多。
1import os2from PIL import Image3from skimage import exposure4import numpy as np5import matplotlib.pyplot as plt678 img = Image.open('/home/vincent/Pictures/work/Unequalized_Hawkes_Bay_NZ.jpg')9 img = np.array(img)10 img_eq = exposure.equalize_hist(img)11 img_adapteq = exposure.equalize_adapthist(img, clip_limit=0.04)1213 plt.figure(0)14 plt.imshow(img)15 plt.title('low contrast image')16 plt.figure(1)17 plt.imshow(img_eq)18 plt.title('high constrast image using normal histogram equalization')19 plt.figure(2)20 plt.imshow(img_adapteq)21 plt.title('high constract image using adaptive histogram euqalization')22 plt.show()。
数字图像处理---直方图均衡化
数字图像处理---直⽅图均衡化直⽅图均衡化的英⽂名称是Histogram Equalization. 图像对⽐度增强的⽅法可以分成两类:⼀类是直接对⽐度增强⽅法;另⼀类是间接对⽐度增强⽅法。
直⽅图拉伸和直⽅图均衡化是两种最常见的间接对⽐度增强⽅法。
直⽅图拉伸是通过对⽐度拉伸对直⽅图进⾏调整,从⽽“扩⼤”前景和背景灰度的差别,以达到增强对⽐度的⽬的,这种⽅法可以利⽤线性或⾮线性的⽅法来实现;直⽅图均衡化则通过使⽤累积函数对灰度值进⾏“调整”以实现对⽐度的增强。
直⽅图均衡化处理的“中⼼思想”是把原始图像的灰度直⽅图从⽐较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直⽅图均衡化就是对图像进⾏⾮线性拉伸,重新分配图像像素值,使⼀定灰度范围内的像素数量⼤致相同。
直⽅图均衡化就是把给定图像的直⽅图分布改变成“均匀”分布直⽅图分布。
缺点: 1)变换后图像的灰度级减少,某些细节消失; 2)某些图像,如直⽅图有⾼峰,经处理后对⽐度不⾃然的过分增强。
直⽅图均衡化是图像处理领域中利⽤图像直⽅图对对⽐度进⾏调整的⽅法。
这种⽅法通常⽤来增加许多图像的局部对⽐度,尤其是当图像的有⽤数据的对⽐度相当接近的时候。
通过这种⽅法,亮度可以更好地在直⽅图上分布。
这样就可以⽤于增强局部的对⽐度⽽不影响整体的对⽐度,直⽅图均衡化通过有效地扩展常⽤的亮度来实现这种功能。
这种⽅法对于背景和前景都太亮或者太暗的图像⾮常有⽤,这种⽅法尤其是可以带来X光图像中更好的⾻骼结构显⽰以及曝光过度或者曝光不⾜照⽚中更好的细节。
这种⽅法的⼀个主要优势是它是⼀个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直⽅图,并且计算量也不⼤。
这种⽅法的⼀个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对⽐度并且降低有⽤信号的对⽐度。
1.连续灰度值r:待处理图像的灰度。
假设r的取值区间[0,L-1], r = 0表⽰⿊⾊,r = L - 1表⽰⽩⾊。
数字图像处理之直方图均衡化
数字图像处理之直⽅图均衡化直⽅图均衡化是图像处理领域中利⽤图像直⽅图对对⽐度进⾏调整的⽅法。
直⽅图均衡化要达到的效果:基本思想:把原始图的直⽅图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从⽽达到增强图像整体对⽐度的效果使⽤的⽅法是灰度级变换:s = T(r)原理:s=T(r) 0≤r≤1T(r)满⾜下列两个条件:(1)T(r)在区间0≤r≤1中为单值且单调递增(2)当0≤r≤1时,0≤T(r) ≤1条件(1)保证原图各灰度级在变换后仍保持从⿊到⽩(或从⽩到⿊)的排列次序条件(2)保证变换前后灰度值动态范围的⼀致性Pr(r)是r的概率密度函数,Ps(s)是s的概率密度函数,Pr(r)和T(r)已知,且T-1(s) 满⾜上述条件(1),所以有已知⼀种重要的变换函数:关于上限的定积分的导数就是该上限的积分值(莱布尼茨准则)对于离散值:其中r k 是第k个灰度级,k = 0,1,2,…,L-1. n k是图像中灰度级为r k的像素个数. n是图像中像素的总数.已知变换函数的离散形式为:sk称作直⽅图均衡化将输⼊图像中灰度级为rk(横坐标)的像素映射到输出图像中灰度级为sk (横坐标)的对应像素得到.实现代码:/******************************************************************************* 作⽤: 灰度均衡函数* 参数:* pixel 原始像素数组* tempPixel 保存变换后图像的像素数组* width 原始图像宽度******************************************************************************/void GrayEqualize(BYTE* pixel, BYTE* tempPixel, UINT width, UINT height){// 灰度映射表BYTE map[256];long lCounts[256];memset(lCounts, 0, sizeof(long) * 256);// 计算各灰度值个数for (UINT i = 0; i < width * height; i++){int x = pixel[i * 4];lCounts[x]++;}// 保存运算中的临时值long lTemp;for (int i = 0; i < 256; i++){lTemp = 0;for (int j = 0; j <= i; j++)lTemp += lCounts[j];map[i] = (BYTE)(lTemp * 255.0f / width / height);}// 变换后的值直接在映射表中查找for (UINT i = 0; i < width * height; i++){int x = pixel[i * 4];tempPixel[i*4] = tempPixel[i*4+1] = tempPixel[i*4+2] = pixel[i * 4]; tempPixel[i*4+3] = 255;}}View Code彩⾊图直⽅图均衡化:更清晰:opencv代码:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>using namespace cv;using namespace std;int main( int argc, const char** argv ){Mat img = imread("MyPic.JPG", CV_LOAD_IMAGE_COLOR); //open and read the imageif (img.empty()) //if unsuccessful, exit the program{cout << "Image cannot be loaded..!!" << endl;return -1;}vector<Mat> channels;Mat img_hist_equalized;cvtColor(img, img_hist_equalized, CV_BGR2YCrCb); //change the color image from BGR to YCrCb formatsplit(img_hist_equalized,channels); //split the image into channelsequalizeHist(channels[0], channels[0]); //equalize histogram on the 1st channel (Y)merge(channels,img_hist_equalized); //merge 3 channels including the modified 1st channel into one imagecvtColor(img_hist_equalized, img_hist_equalized, CV_YCrCb2BGR); //change the color image from YCrCb to BGR format (to display image properly)//create windowsnamedWindow("Original Image", CV_WINDOW_AUTOSIZE);namedWindow("Histogram Equalized", CV_WINDOW_AUTOSIZE);//show the imageimshow("Original Image", img);imshow("Histogram Equalized", img_hist_equalized);waitKey(0); //wait for key pressdestroyAllWindows(); //destroy all open windowsreturn0;}View Code代码中使⽤的函数:New OpenCV functionscvtColor(img, img_hist_equalized, CV_BGR2YCrCb)This line converts the color space of BGR in 'img' to YCrCb color space and stores the resulting image in 'img_hist_equalized'.In the above example, I am going to equalize the histogram of color images. In this scenario, I have to equalize the histogram of the intensity component only, not the color components. So, BGR format cannot be used because its all three planes represent color components blue, green and red. So, I have to convert the original BGR color space to YCrCb color space because its 1st plane representsthe intensity of the image where as other planes represent the color components.void split(const Mat& m, vector<Mat>& mv )This function splits each channel of the 'm' multi-channel array into separate channels and stores them in a vector, referenced by 'mv'. Argument listconst Mat& m - Input multi-channel arrayvector<Mat>& mv - vector that stores the each channel of the input arrayequalizeHist(channels[0], channels[0]);Here we are only interested in the 1st channel (Y) because it represents the intensity information whereas other two channels (Cr and Cb) represent color components. So, we equalize the histogram of the 1st channel using OpenCV in-built function, 'equalizeHist(..)' and other two channels remain unchanged.void merge(const vector<Mat>& mv, OutputArray dst )This function does the reverse operation of the split function. It takes the vector of channels and create a single multi-channel array. Argument listconst vector<Mat>& mv - vector that holds several channels. All channels should have same size and same depthsOutputArray dst - stores the destination multi-channel arraycvtColor(img_hist_equalized, img_hist_equalized, CV_YCrCb2BGR)This line converts the image from YCrCb color space to BGR color space. It is essential to convert to BGR color space because 'imshow(..)' OpenCV function can only show images with that color space.This is the end of the explanation of new OpenCV functions, found in the above sample code. If you are not familiar with other OpenCV functions, please refer to the previous lessons.参考博客:http://opencv-srf.blogspot.jp/2013/08/histogram-equalization.html。
直方图均衡化
1 直方图均衡化原理、目标、应用及编程实现1.1 直方图均衡化原理直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
直方图规定化直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:令Pr (r )和Pz (z )分别为原始图像和期望图像的灰度概率密度函数。
如果对原始图像和期望图像均作直方图均衡化处理,应有⎰==x r dr r P r T S 0)()((1) ⎰==xz dzz p Z G V 0)()((2) )(1V G Z -= (3)由于都是进行均衡化处理,处理后的原图像概率密度函数Ps (S )及理想图像概率密度函数PV (V )是相等的。
于是,我们可以用变换后的原始图像灰度级S 代替(2)式中的V 。
即Z = G - 1(S ) (4)这时的灰度级Z 便是所希望的图像的灰度级。
此外,利用(1)与(3)式还可得到组合变换函数Z = G - 1[T (r )] (5) 对连续图像,重要的是给出逆变换解析式。
对离散图像而言,有n n Z P ii Z =)( (6)∑-===10)()(l i i z i i Z P Z G V (7))]([)(11i i i r T G S G Z --== (8)1.2直方图均衡化目标及应用这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像直方图的均衡化处理
一,技术要求
1.1,利用matlab提供的函数处理 (2)
1.2,利用matlab自行编辑代码处理 (3)
二,基本原理 (3)
2.1,直方图的均衡化 (3)
2.2,直方图的标准化 (3)
三,建立模型描述 ......................................................................... 3~4
3.1,利用matlab提供的函数处理 (4)
3.2,利用matlab自行编辑代码 (4)
四,源程序代码 ............................................................................. 5~6
4.1,绘制图像直方图的代码 (5)
4.2,绘制图像均衡化后直方图的代码 (5)
4.3,显示均衡化后图像的代码 (6)
五,调试过程及结论 ..................................................................... 6~8
5.1,在编辑窗口键入绘制直方图的源代码得到的输出结果为图2 (6)
5.2,利用matlab函数绘制的图像直方图标准化的输出结果如图3..7
5.3,直方图均衡化输出结果如图4所示。
(8)
六,心得体会 (9)
七,参考文献 (9)
图像直方图的均衡化处理
一,技术要求
1.1,利用matlab提供的函数处理
利用matlab提供的函数画出一幅图像的直方图,对其进行均衡化和标准化处理,并比较均衡化(标准化)后图像和原图像的区别。
1.2,利用matlab自行编辑代码处理
利用matlab自行编辑代码,实现一幅图像的直方图显示和均衡化的处理,同样比较处理前后两幅图像的区别,了解图像均衡化的效果和实际运用。
二,基本原理
直方图是多种空域处理技术的基础。
它能有效的用于图像增强。
2.1,直方图的均衡化
直方图的均衡化是把原始图像的灰度直方图从比较集中的某个区域变成全部灰度范围内的均匀分布,实际上是对图像进行非线性拉伸。
使一定灰度范围内的像素个数大致相同。
这样就能增强图像的局部对比度,亮度可以更好的在直方图上分布。
2.2,直方图的标准化
直方图的标准化实际上原理和直方图的均衡化原理大致相同,也是将原始图像的灰度值从比较集中地部分扩展到较大范围内的均匀分布,但是它和均衡化的不同在于均衡化是将灰度值范围变成全部灰度范围的均匀分布,而标准化是将灰度值范围扩展到一个相对以前要大一些的范围内,并不要求要变成全部灰度范围内的均匀分布。
三,建立模型描述
3.1,利用matlab提供的函数处理
由于这个过程很简单,这里不必要画出流程图,只简述其操作过程:利用函数imread()读取原始图像,之后利用函数imhist()即可得到读入图像的直方图,再利用函数J=histeq(I,256)就可把原始图像均衡化处理,再利用函数imhist()可得到均衡化后图像的直方图;而直方图的标准化操作过程大致和均衡化过程相同。
唯一的区别是对原始图像进行标准化处理时,规定了直方图的向量为counts,即标准化是利用函数J=histeq(I,counts)。
3.2,利用matlab自行编辑代码
利用函数imread()读取原始图像,利用自行编辑的代码显示原始图像的直方图,对原始图像进行均衡化处理,在利用编辑的代码显示出均衡化处理后图像的直方图,依次输出各个处理后的图像,比较学习。
其流程图如图1所示。
图 1 图像均衡化和标准化流程图
四,源程序代码
4.1,绘制图像直方图的代码
f=imread('pout.tif');
figure,imshow(f);
[m,n]=size(f); %测量图像尺寸参数
h=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255
h(k+1)=length(find(f==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置
end
figure,bar(0:255,h,'g') %绘制直方图
title('原图像直方图')
xlabel('灰度值')
ylabel('出现概率')
4.2,绘制图像均衡化后直方图的代码
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=h(j)+S1(i); %计算Sk
end
end
S2=round((S1*256)+0.5); %将Sk归到相近级的灰度
for i=1:256
heq(i)=sum(h(find(S2==i))); %计算现有每个灰度级出现的概率end
figure,bar(0:255,heq,'b') %显示均衡化后的直方图
title('均衡化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
4.3,显示均衡化后图像的代码
F=f;
for i=0:255
F(find(f==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素end
figure,imshow(F) %显示均衡化后的图像
title('均衡化后图像')
五,调试过程及结论
5.1,在编辑窗口键入绘制直方图的源代码得到的输出结果为图2
图2 利用matlab代码及matlab函数绘制的直方图
由源程序可以看出绘制图像直方图的算法很简单,由图像可以看出原始图像直方图灰度范围集中在中间的一个区域(像素值为:100—200),图像的整体效果是:图像动态范围小,细节不够清楚。
5.2,利用matlab函数绘制的图像直方图标准化的输出结果如图3。
图 3 直方图的标准化
直方图标准化是由matlab提供的函数实现的,利用到直方图绘制函数imhist()及直方图标准化函数histeq()。
由图像可以看出,直方图标准化后的图像比之以前更加清晰,明亮,细节部分更加清晰,整体感官效果更好;图像的直方图也发生变化,由原始图像的直方图可以看出像素值基本上集中在100—200的范围内,直方图标准化后像素值在更大的一个范围内均匀分布。
5.3,直方图均衡化输出结果如图4所示。
图 4 直方图的均衡化
直方图均衡化可由matlab提供的函数实现,也可由源代码实现,利用matlab 函数J=histeq(i,256)和inhist(J)课得到上图中区域4的图像,源代码得到区域5所示图像,可以明显看出直方图均衡化能把原先集中在一定范围内的灰度值扩展到全部灰度值范围内,使之均匀分布。
原始图像进过处理后可以明显看出细节部分更加清晰,整体对比度提高,视觉效果更好。
六,心得体会
数字图像处理是一门很前沿的学科,在现代化信息社会中有着很重要的运用,学好这门课程对今后有着巨大的作用。
在学好课本知识的同时,我们还应该能将理论知识用于实际。
在学习时不仅要做好课后习题,而且在实验中还要能学会运用课本所授知识。
而且在本次实验中还遇到过很多问题,给实验造成一定的难度,但经过思考和查阅资料之后,这些问题都能解决,实验最终能得以完成。
从这次的实验中我深刻了解到理论知识的重要性,没有熟练地掌握好理论知识,在实验时会捉襟见肘,处处都感觉能懂但却又都不出来;另外,这次实验还锻炼的我的实际动手能力,虽然只是在计算机上操作,但这也能加深我对数字图像处理的理解和记忆。
不管是什么学科,只有将理论联系实际才能跟好的学习和利用知识,数字图像处理这门课程尤其明显,在今后的学习中一定要学习好理论知识,同时也要增强实际动手能力,这样才能学以致用。
七,参考文献
《数字信号处理》Rafael C.G onzalez & Richard E.Woods著
《matlab程序设计与应用》刘卫国主编。