灰度图象的直方图规定化
- 格式:doc
- 大小:766.50 KB
- 文档页数: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中出现的次数。
利用直方图均衡化和直方图规定化对图像进行增强利用直方图均衡化和直方图规定化对图像进行增强4.1 利用直方图均衡化对图像进行增强通过灰度变换将一幅图像转换为另一幅具有均衡直方图的图像,即在一定灰度范围内具有相同的象素点数的图像的过程。
其“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
主要缺点:1、变换后图像的灰度级减少,某些细节消失;2、某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
算法如下:为讨论方便,以r 和s 分别表示归一化了的原图像灰度和经直方图修正后的图像灰度。
即1,0≤≤s r在[0,1]内设有变换S=T(r)且该函数单调递增,1)(0≤≤r T ,于是有反变换)(1s T r -=有概率论知,如果已知随即变量r 的概率密度)(r p r ,而随机变量s 是r 的函数。
则s 的概率密度)(s p s 可以有)(r p r 求出。
[])()()()()(1s T ds d r p ds dr r p dr r p ds d s p r r r r s -∞-===?从上式可以看出通过变换函数)(r T 可以控制图像灰度级的概率密度函数,从而改变图像灰度层次,这就是直方图修正技术的基础。
因为归一化规定 1)(=s p s有1式有 dr r p ds r )(=两边积分得 dr r p r T s rr )()(0?==上式就是所求得的变换函数。
它表明当变换函数)(r T 是原图像直方图累积分布函数时,能达到直方图均衡化的目的。
离散形式可表示为:∑∑=====ki i k i i r k k n n r p r T s 00)()(可见均衡后的各像素的灰度值k s 可直接由原图像的直方图算出。
图像直方图均衡化原理
图像直方图均衡化是一种常用的图像增强方法,通过调整图像的像素灰度分布,使得图像的对比度增强、细节更加清晰。
其原理主要分为以下几个步骤:
1. 统计像素灰度值的分布:首先,对待处理的图像,统计每个灰度级别的像素点数量,得到原始图像的灰度直方图。
2. 计算累计分布函数:根据灰度直方图,计算每个灰度级别对应的累计分布函数,即该灰度级别及其之前的像素点的累积数量比例。
3. 灰度映射:对于每个像素点,将其灰度值通过累计分布函数进行映射,得到新的灰度值。
通常情况下,可以通过线性映射或非线性映射来实现,使得图像的灰度分布变得更加均匀。
4. 重构图像:将经过灰度映射处理后的灰度值替换原始图像中的对应像素点的灰度值,从而得到均衡化后的图像。
通过图像直方图均衡化处理,可以提高图像的对比度,使暗部和亮部细节更加突出,同时抑制了图像中灰度级别分布不均匀的问题。
这种方法在图像增强、图像分析等领域都有广泛应用。
图像处理中的直方图均衡化技术图像处理是现代科技的一个重要应用领域。
图像处理技术在人们的生活中扮演着越来越重要的角色。
其中,直方图均衡化技术是一种常用的图像处理方法,它可以将图像的灰度值均匀分布,在图像增强、提高对比度、消除噪声等方面有一定的应用。
在图像处理中,灰度值是十分重要的一个概念。
灰度值指的是在图像上表示亮度的数字。
在黑白图像中,每个像素有一个灰度值,值越大,代表该点颜色越白;值越小,代表该点颜色越黑。
而在彩色图像中,每个像素有三个灰度值,分别对应红、绿、蓝三个通道。
图像处理中,通过直方图统计图像中每个灰度值的出现次数,从而可以查看图像的亮度分布情况。
直方图中横坐标代表灰度值,纵坐标代表该灰度值在图像中出现的次数。
在直方图中,可以通过观察图像的亮度分布,得出该图像的对比度、亮度等情况。
如果直方图呈现一种均匀分布的状态,代表图像具有较好的对比度和良好的亮度平衡;而如果直方图呈现一种高峰低谷的状态,代表图像对比度较差,亮度不平衡。
针对上述情况,直方图均衡化技术应运而生。
该技术通过对图像灰度值进行处理,来达到增强图像对比度、提高亮度平衡等目的。
具体来说,直方图均衡化可以通过以下步骤完成:1. 统计图像中每个灰度值出现的次数,并计算该灰度值在图像中所占的比重。
2. 根据统计结果,对灰度值进行归一化处理,即将不同灰度值的比重进行加权平均,得到一种均匀的灰度值分布;3. 利用均匀化处理得到的灰度值分布,对原图像中的每个像素进行重新设置灰度值。
通过直方图均衡化,可以使图像灰度值均匀分布,提高图像的对比度。
通过该技术,可以消除一些因摄影条件不良或图像处理不当引起的低对比度、低亮度等问题,使图像更加清晰明亮,提高图像的质量。
当然,直方图均衡化也存在一些问题。
例如,当图像中某些灰度值集中分布时,经过均衡化处理后,图像可能会产生过度增强或失真等现象。
此外,在对彩色图像进行直方图均衡化时,需要对三个通道进行均衡化处理,才能达到最佳效果。
第20卷 第2期长 春 大 学 学 报Vo.l 20 No .2 2010年2月J O URNAL OF CHANGCHUN UN I VER SI TYFeb .2010收稿日期:2009211208作者简介:邢笑雪(19812),女,山西霍州人,讲师,博士研究生,主要从事数字图像处理方面的研究。
基于M atlab 的灰度直方图规定化实现方法的研究邢笑雪,吉淑娇(长春大学 电子信息工程学院,吉林 长春 130022)摘 要:直方图规定化可以将图像的直方图转化为需要的形状,有目的地增加某个灰度区间的图像,使用户获得感兴趣的信息。
本文介绍了直方图规定化的两种经典的实现算法:单映射规则(S ML)和组映射规则(G ML)的基本原理,并应用这两种算法对实例图像进行规定化处理和比较分析,证明了G ML 相对于S ML 的优越性。
仿真结果表明,本文所实现的G ML 算法改进了以往算法中规定化后图像的灰度级与规定直方图的灰度级不能完全近似的问题。
关键词:M atlab 直方图规定化;单映射规则;组映射规则中图分类号:TP391141 文献标志码:A文章编号:1009-3907(2010)02-0037-020 引 言图像增强的首要目标是改善图像,以使图像更适合于特定应用。
图像增强的方法主要取决于图像希望达到的特定效果,一般来说,图像增强的方法分为两大类:基于图像灰度值统计的方法和基于图像空间频率的方法[1]。
用灰度直方图增强图像对比度是基于图像灰度值统计的一种重要方法,它以概率论为基础的,常用的实现算法主要是直方图均衡化和直方图规定化[2][3]。
直方图均衡化主要用于增强动态范围较小的图像的反差,基本思想是把原始图的直方图变换为均匀分布的形式,这样就增强了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。
直方图均衡化的优点是能自动地增强整个图像的对比度,但它的具体的增强效果不好控制,处理的结果总是得到全局均衡化的直方图[4]。
一、课程设计目的(1)进一步掌握matlab的用法;(2)在实践中深入理解图像显示的方法;(3)学会用matlab对图像进行显示。
二、课程设计要求(1)根据题目,查阅有关资料,掌握图像显示技术;(2)学习MATLAB软件,掌握MATLAB各种函数的使用;(3)根据图像显示原理,运用MATLAB进行编程,仿真调制过程,记录并分析仿真结果;(4)形成设计报告。
三、设计方案一般情况下,如果图像的灰度分别集中在比较窄的区间,从而引起图像细节的模糊,为了使图像细节清晰,并使目标得到突出,达到图像增强的目的,可通过改善各部分亮度的比例关系,即通过直方图的方法来实现.直方图的方法是以概率论为基础的.常用的方法有直方图均衡化和直方图规定化.(1)直方图均衡化直方图均衡化又称直方图平坦化,是将一已知灰度概率密度分布的图像经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像.其结果是扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果.直方图均衡化的具体实现步骤如下:1).列出原始图像的灰度级,-=Lfj1,,1,j2).统计各灰度级的像素数目=L,-nj1,,,1j3).计算原始图像直方图各灰度级的频数=Lj=P(-fnn/,)11,,,fjj4).计算累积分布函数1,,,1,0,)()(0-==∑=L k j f P f C k j j f5).应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个数,其中INT 为取整符号1,,1]5.0)()[(min min max -=++-=P i g f C g g INT g i6).统计映射后各灰度级的像素数目 ni, i=0,1,…,k,…P-1.7). 计算输出直方图Pg(gi)=ni/n, i=0,1,…,P-1.8). 用fj 和gi 的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像(2) 直方图规定化直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:令Pr (r )和Pz (z )分别为原始图像和期望图像的灰度概率密度函数。
数字图像处理与模式识别实验目的打开一幅图像,进行直方图均衡化。
并将其灰度线性变化,将灰度线性拉伸。
实验准备实验之前,收集数字图像处理编程的相关资料,查阅C或Java关于本实验图像处理的相关类库和编程核心。
经过C和Java相关资料编程的比较,Java将图像处理的类封装的较完整,运用起来比C灵活方便。
以下是相关类库和实现操作的方法:import java.awt.image.*;import javax.imageio.*; //相关的图像处理类库和方法封装在两个包中//Java读取图像的方法BufferedImage newImage = ImageIO.read(new File(filePath));int width = newImage.getWidth(); //获得图像的像素宽度int height = newImage.getHeight(); //获得图像像素的长度//获得图像的色彩模型RGB分量ColorModel colorModel = ColorModel.getRGBdefault();int r = colorModel.getRed(currPixArray[k]);int g = colorModel.getGreen(currPixArray[k]);int b = colorModel.getBlue(currPixArray[k]); //分别获得图像的rgb分量PixelGrabber p = new PixelGrabber(image, 0, 0, width, height, array, 0, width); //将image图像像素值读入一位矩阵实验步骤算法实现RGB图像转灰度图由于数字图像的直方图均衡化和灰度的线性拉伸都是基于灰度图的算法实现,本框架中增加了由彩色图转灰度图的功能。
简单讲述下算法思想:将存储图像的一维矩阵像素点彩色分量用ColorModel类中的getRed(),getGreen()和getBlue()方法读取,按照(r * 0.3 + g * 0.59 + b * 0.11)公式计算灰度值。
灰度图像的直方图均衡化处理研究一、本文概述随着图像处理技术的飞速发展,直方图均衡化作为一种经典的图像增强方法,在改善图像质量和提升视觉效果方面发挥着重要作用。
本文旨在深入研究灰度图像的直方图均衡化处理,通过对其原理、方法和应用效果的详细阐述,为相关领域的研究者和实践者提供有益的参考和启示。
本文将简要介绍直方图均衡化的基本原理和目的,阐述其在灰度图像处理中的适用性和优势。
接着,文章将重点探讨直方图均衡化的实现方法,包括灰度图像的预处理、直方图计算、累积分布函数计算以及映射表生成等关键步骤。
本文还将对直方图均衡化后的图像效果进行分析和评价,包括对比度提升、细节增强以及噪声影响等方面的讨论。
本文将总结直方图均衡化在灰度图像处理中的实际应用和前景展望,以期为推动图像处理技术的发展和应用做出贡献。
通过本文的研究,读者可以深入了解直方图均衡化的基本原理和实现方法,掌握其在灰度图像处理中的应用技巧,为实际工作和研究提供有益的参考和指导。
二、灰度图像与直方图均衡化基础灰度图像是一种只包含亮度信息而不包含颜色信息的图像。
在灰度图像中,像素值通常使用一个8位(或称为1字节)的整数表示,范围从0到255,其中0表示黑色,255表示白色,中间的数值表示不同的灰度级别。
灰度图像在计算机视觉和数字图像处理中扮演着重要角色,因为它们简化了图像数据,同时保留了足够的信息来进行许多图像处理任务。
直方图均衡化是一种提高图像对比度的方法,特别适用于改进图像的可用数据范围。
它通过拉伸像素强度分布来增强图像的对比度。
直方图均衡化的基本思想是将原始图像的灰度直方图从较为集中的某个灰度区间变成在全部灰度范围内的均匀分布。
这样,原来图像中灰度相近的区域在增强后图像的灰度差别增大,从而提高图像的对比度。
直方图均衡化的数学过程可以描述为:首先计算原始图像的直方图,即每个灰度级出现的频率;然后根据这些频率计算一个累积分布函数(CDF);使用CDF对原始图像的每个像素进行变换,得到均衡化后的图像。
图像增强—灰度变换及直方图均衡化一、实验目的1、了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。
2、掌握直接灰度变换的图像增强方法。
3、掌握灰度直方图的概念及其计算方法;4、掌握直方图均衡化的计算过程;二、实验原理及知识点1、图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。
其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。
图像增强可以在空间域中执行,也可以在变换域中执行。
2、空间域指的是图像平面本身,在空间域内处理图像是直接对图像的像素进行处理。
空间域处理方法分为两种:灰度级变换、空间滤波。
空间域技术直接对像素进行操作,其表达式为g(x,y)=T[f(x,y)]其中f(x,y)为输入图像,g(x,y)为输出图像,T是对图像f进行处理的操作符,定义在点(x,y)的指定邻域内。
定义点(x,y)的空间邻近区域的主要方法是,使用中心位于(x,y)的正方形或长方形区域。
此区域的中心从原点(如左上角)开始逐像素点移动,在移动的同时,该区域会包含不同的邻域。
T应用于每个位置(x,y),以便在该位置得到输出图像g。
在计算(x,y)处的g值时,只使用该领域的像素。
2、灰度变换T的最简单形式是使用领域大小为1×1,此时,(x,y)处的g值仅由f在该点处的亮度决定,T也变为一个灰度变换函数。
由于灰度变换函数仅取决于亮度的值,而与(x,y)无关,所以亮度函数通常可写做如下所示的简单形式:s=T(r)其中,r表示图像f中相应点(x,y)的亮度,s表示图像g中相应点(x,y)的亮度。
灰度拉伸又叫对比度拉伸是最基本的一种灰度变换,使用简单的分段线性变换函数,可以提高灰度的动态范围,适用于低对比度图像的处理,增强对比度。
3、直方图是多种空间城处理技术的基础。
直方图操作能有效地用于图像增强。
除了提供有用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。
其中,n 表示图像中像素的总数,n k 是在图像中出现这种灰度级的次数,L 表示灰度级四、灰度直方图是数字图像处理的重要工作。
请简述灰度直方图规定化、 均衡化的基本原理。
并以分辨率为 5*4,图像的深度6bit 的图像为例,自举例说明直方图均衡化的计算过 程。
解答:数字图像的直方图是作为图像每一个灰度级的统计概率分布 ”它提供了图像灰度分布的 概貌,直方图增强技术正是利用修改给定图像直方图的方法来增强图像的 ,最后得到的图像 增强程度取决于我们所采用的直方图。
令变量 r 和S 分别代表图像增强前后的像素灰度级, 相应灰度级分布的概率密度分别为P (r)和P S (s) o为讨论方便,假设像素灰度值已经归一化在区间[0,1],在灰度级坐标中r=0表示黑,r=1表示白。
对区间[0,1]内任一个r 值按变换函数:S = T(r)( 1)进行变换,T (r )满足两个条件:(1)单值单调递增函数;(2) 0 < T (r )< 1。
条件(1)使灰度级保持从黑到白的次序,条件( 2)保证映射变换后像素灰度值在允许的范围内。
从S 到r 的反变换为:r =T/(S ) , 0< s w 1 o和(2)o 由概率理论知,若P (r)和变换函数s = T(r)drP s (S )=[ P r (r) ]r»s)ds直方图增强技术就是通过变换函数 的外貌。
对于连续图像,变换函数为:rs=T(r) = 0 P(r)dr,0 <r <1此式右边为累积分布函数(CDF ,由该式对r 求导有:ds C 、 ——=P(r) dr代入(3)得到:(6)这说明,在变换后变量S 在定义域内,P s (s)是均匀概率密度。
在图像增强意义上,这 相当于像素的动态范围增加。
对于离散图像,灰度级r k 的概率值为:P r (r k )=nk ,0 <r k <1,k =0,1,2,•.…,L-1n(2)同样,规定变量s 也满足条件(1) 已知,r =T 」(s)是单值单调增加函数,则有:T (r )控制图像灰度级的概率密度函数而改变图像的数目,P r (r k )为第k 级灰度级的概率。
灰度图象的直方图规定化实验目的:-掌握BMP 图象文件结构、文件操作等基本功能 -掌握直方图均衡、直方图规定化处理等技术实验内容:将一幅给定的灰度图象进行图象增强,其增强后的图象具有规定的直方图形式。
条件:1)给定一幅灰度图象;2)给定增强后的直方图G(自己计算每一灰度的概率值):方法描述:可以用概率密度函数)(r p r 来表示一幅图象的灰度分布。
其中,r 为灰度值,)(r p r 的值为概率密度。
实验要将原始图象R 通过转换函数)(x V 转换为具有规定概率密度函数)(g p g 最终增强图象G 。
设原图象的概率密度函数为)(r p r 。
变换后的图象的概率密度函数=规定的概率密度函数。
由随机变量函数的概率密度公式可以得到:)()()'()]([11r p r V r V p g r =⋅--⎰⎰=⋅--xxg r dr r p dr r V r V p 011)()()'()]([设 ⎰=xr r dr r p x P 0)()(, ⎰=xg g dg g p x P 0)()(则有 x r g x r r r P r V P 01)()]([==-=)()]([1x P x V P g r =- )]([)(11x P P x V g r --= )]([)( 1x P P x V r g -=∴所求得的)(x V 就是从原始图象到最终增强图象的转换函数。
上述推导得到的)(x V 的表达式适用于在灰度级和空间上都连续的图象。
为达到数字图象处理的目的,必须对上述表达式进行近似,这种离散形式的近似可以导致图象灰度级的丢失。
设图象有256灰度级,该近似方法如下:n n r p rr =)(, ∑==xr r r p x P 0)()(其中,r n 为灰度值为r 的像素总数,n 为总像素数。
r =1,2, (255))(x P g 的计算方法相同。
255,,2,1 ))],(([)(1⋅⋅⋅==-x x P P P x V r g g 值域内最为接近的值转为在附录所给出的源代码中,转换函数)(x V 由数组SG[256]实现。
PSNR 值,即峰值信噪比,可以作为衡量输出图象的客观保真度的标准。
设图象有256灰度级,则它的计算公式如下:⎪⎪⎭⎫⎝⎛-⋅=∑22)],(),([255log 10y x f y x g PSNR 图象总像素数 g(x,y)和f(x,y)分别代表处理后的图象和原始图象。
显然,PSNR 值越大,图象的保真度越高。
整个过程的处理框图:读入原始图象计算原始图象的直方图n r p r ⋅)(存入H[256]并将数据输出 计算原始图象的均衡直方图255)(⋅x P r 存入S[256]并将数据输出生成并保存均衡图象计算原始图象至均衡图象的PSNR 值 计算规定的直方图255)(⋅x p g 存入G[256]计算规定的直方图的均衡直方图255)(⋅x P g 存入GS[256]并将数据输出计算从原始图象到最终增强图象的转换函数)(x V 生成并保存最终增强图象计算最终增强图象的直方图GR[256]并将数据输出计算原始图象至最终增强图象的PSNR 值实验结果:100020003000400050006000123456789111133155177199221243r计数原图象直方图H:5010015020025030011937557391109127145163181199217235253rs直方图H 的均衡直方图S:原始图象R均衡图象S PSNR=10.954935目标直方图G5010015020025030012039587796115134153172191210229248Gs目标直方图G 的均衡直方图最终增强图象G PSNR=11.9472871000200030004000500060001224364851612714816919211232253G 计数最终增强图象直方图附录:源程序#include <afx.h>#include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC extensions#include <math.h>#ifndef HXLBMPFILE#define HXLBMPFILEclass BMPFILE{public:RGBQUAD palette[256];BITMAPFILEHEADER imagefh;BITMAPINFOHEADER imageih;int imagew,imageh;UCHAR *imagedata;UCHAR *GetByteatH(int height);BOOL AllocateMem();BOOL bIsOk;void LoadBMPFILE(char *fname);void SaveBMPFILE(char *fname);BMPFILE();~BMPFILE();};#endifvoid main(){BMPFILE bmpfile;bmpfile.LoadBMPFILE ("实验图象1.bmp");if(!bmpfile.bIsOk){printf("Error loading image.\n");return;}// do other processing with the imagedataint H[256]; //原始图象直方图memset(H,0,sizeof(H));int S[256]; //变换映射-均衡直方图Sdouble psnr; //峰值信噪比int i;int f;for(i=0;i<bmpfile.imageh*bmpfile.imagew;i++)H[*(bmpfile.imagedata+i)]++;S[0]=H[0];for(i=1;i<256;i++)S[i]=S[i-1]+H[i];for(i=0;i<256;i++)S[i]=S[i]*255/(bmpfile.imageh*bmpfile.imagew);for(i=0;i<bmpfile.imageh*bmpfile.imagew;i++)*(bmpfile.imagedata+i)=S[*(bmpfile.imagedata+i)];//原图象的直方图Hprintf("H: ");for(i=1;i<256;i++)printf("%d ",H[i]);printf("\n");//原图象(直方图H)的均衡直方图printf("S: ");for(i=1;i<256;i++)printf("%d ",S[i]);printf("\n");//均衡图象bmpfile.SaveBMPFILE ("实验图象1-均衡图象.bmp");//PSNR值psnr=0;for(i=0;i<255;i++)psnr+=(S[i]-i)*(S[i]-i)*H[i];psnr=10*log10(double(bmpfile.imageh)*bmpfile.imagew*255*255/psnr) ;printf("PSNR: %f\n",psnr);//目标直方图G的均衡直方图int G[256]; //规定直方图int GS[256]; //规定直方图的均衡直方图for(i=0;i<=127;i++)G[i]=i;for(i=128;i<=255;i++)G[i]=(255-i);GS[0]=G[0];for(i=1;i<256;i++)GS[i]=GS[i-1]+G[i];f=GS[255]/255+1;for(i=0;i<256;i++)GS[i]/=f;printf("GS: ");for(i=1;i<256;i++)printf("%d ",GS[i]);printf("\n");//最终增强图象int i2;int minNumber;int SG[256]; //从原图象的均衡图象到最终增强图象的映射memset(SG,0,sizeof(SG));for(i=0;i<256;i++){minNumber=255;for(i2=0;i2<256;i2++)if(abs(S[i]-GS[i2])<minNumber){minNumber=abs(S[i]-GS[i2]);SG[S[i]]=i2;}}for(i=0;i<bmpfile.imageh*bmpfile.imagew;i++)*(bmpfile.imagedata+i)=SG[*(bmpfile.imagedata+i)];bmpfile.SaveBMPFILE ("实验图象1-最终增强图象.bmp");//最终增强图象的直方图GR R=realint GR[256];memset(GR,0,sizeof(GR));for(i=1;i<256;i++)GR[SG[S[i]]]+=H[i];printf("GR: ");for(i=1;i<256;i++)printf("%d ",GR[i]);printf("\n");//最终增强图象的PSNR值psnr=0;for(i=0;i<255;i++)psnr+=(SG[S[i]]-i)*(SG[S[i]]-i)*GR[i];psnr=10*log10(double(bmpfile.imageh)*bmpfile.imagew*255*255/psnr) ;printf("PSNR of the destination image: %f\n",psnr);}。