实验2(A) 灰度图像直方图统计与均衡化

合集下载

图像直方图均衡化原理

图像直方图均衡化原理

图像直方图均衡化原理
图像直方图均衡化是一种常用的图像增强方法,通过调整图像的像素灰度分布,使得图像的对比度增强、细节更加清晰。

其原理主要分为以下几个步骤:
1. 统计像素灰度值的分布:首先,对待处理的图像,统计每个灰度级别的像素点数量,得到原始图像的灰度直方图。

2. 计算累计分布函数:根据灰度直方图,计算每个灰度级别对应的累计分布函数,即该灰度级别及其之前的像素点的累积数量比例。

3. 灰度映射:对于每个像素点,将其灰度值通过累计分布函数进行映射,得到新的灰度值。

通常情况下,可以通过线性映射或非线性映射来实现,使得图像的灰度分布变得更加均匀。

4. 重构图像:将经过灰度映射处理后的灰度值替换原始图像中的对应像素点的灰度值,从而得到均衡化后的图像。

通过图像直方图均衡化处理,可以提高图像的对比度,使暗部和亮部细节更加突出,同时抑制了图像中灰度级别分布不均匀的问题。

这种方法在图像增强、图像分析等领域都有广泛应用。

灰度直方图绘制及直方图均衡化

灰度直方图绘制及直方图均衡化

昆明理工大学(数字图像处理)实验报告 实验名称: 灰度直方图绘制及直方图均衡化 专 业: 电子信息科学与技术 姓 名: 学 号: 成 绩:[实验目的]1、加强对灰度直方图及直方图均衡化的理解。

2、掌握直方图均衡化方法。

[实验内容]1、编程实现图像的灰度直方图。

2、实现直方图均衡化。

[实验原理]灰度直方图:1、直方图概念:灰度直方图表示图像中每种灰度出现的频率。

2、直方图的作用: 反映一幅图像的灰度分布特性3、直方图的计算: nk 为图像中出现rk 级灰度的像素数,n 是图像像素总数,而 nk/n 即为频数。

直方图均衡化:1、算法思想:通过函数变换,对在图像中像素个数多的灰度 级进行展宽,而对像素个数少的灰度级进行缩减。

从而达 到清晰图像的目的。

2、变换后每一个r 都对应一个s ,变换函数须满足二个条件 :(1)T 单值单增函数。

(2)对 有 则有: [实验步骤]离散情况下的直方图均衡化的算法:1)、列出原始图像的灰度级2)、统计各灰度级的像素数目 10-≤≤L r 1)(0-≤≤L r T 10)(1-≤≤=-L s s T r 1,...2,1,010,)(-=≤≤=l k r Nn r P k k k3)、计算原始图像直方图各灰度级的频数4)、计算累积分布函数5)、计算映射后的输出图像的灰度级。

6)、用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像。

创建相应的菜单并建立相应的消息响应函数:添加一个灰度直方图显示框。

调出资源视图窗口,添加ID为IDD_DIALOG4的对话框资源,设计如图:创建对话框类CDialog_ZFT并按下表关联对应变量:资源类型资源ID 关联变量类型图片控件IDC_zft CStatic绘制文本框IDOK intvoid CDialog_ZFT::OnOK(){CWnd *pwnd=GetDlgItem(IDC_zft);CDC *mydc=pwnd->GetDC();for(int i=0;i<count;i++){mydc->MoveTo(i+10,220);mydc->LineTo(i+10,220-data[i]*180/m_fmax);}/**************直方图****************/void CDLView::OnZft(){// TODO: Add your command handler code here if(m_DibHead==NULL){MessageBox("请打开一幅图像");return;}long w,h;w=m_DibHead->biWidth;h=m_DibHead->biHeight;int i ,j;float h1[256],h2[256];float fmax=0.0;for(i=0;i<256;i++)h1[i]=0;for(i=0;i<h;i++){for(j=0;j<w;j++){h1[*(m_Image+i*w+j)]++;}}for(i=0;i<256;i++){h2[i]=h1[i]*1.0/w/h;if(fmax<h2[i])fmax=h2[i];}CDialog_ZFT zft;zft.data=h2;zft.count=256;zft.m_fmax=fmax;zft.DoModal();}/**************直方图均衡化***************/zftjh(unsigned char *lpDib,long lWidth,long lHeight) {unsigned char *lpsrc;long lresult(0);long i,j;unsigned char bMap[256];long lCount[256];for(i=0;i<256;i++)lCount[i]=0;for(i=0;i<lHeight;i++)for(j=0;j<lWidth;j++){lpsrc=lpDib+i*lWidth+j;lCount[*lpsrc]++;}for(i=0;i<256;i++){lresult=0;for(j=0;j<=i;j++)lresult+=lCount[j];bMap[i]=(lresult*255)/lHeight/lWidth;}for(i=0;i<lHeight;i++)for(j=0;j<lWidth;j++){lpsrc=lpDib+i*lWidth+j;*lpsrc=bMap[*lpsrc];}}void CDLView::OnZftjunh(){// TODO: Add your command handler code hereif(m_DibHead->biBitCount!=8){MessageBox("当前版本仅支持256色位图的操作!","系统提示!",MB_ICONINFORMATION|MB_OK);return;}zftjh(m_Image,m_DibHead->biWidth,m_DibHead->biHeight);Invalidate();}[实验结果]原图均衡化后[实验总结]通过对比图像可知,变换后直方图趋向平坦,灰级减少,灰度合并。

图像处理:数字图像的灰度直方图均衡化

图像处理:数字图像的灰度直方图均衡化

图像处理:数字图像的灰度直方图均衡化简介在数字图像处理中,灰度直方图均衡化是一种常用的图像增强技术。

它通过重新分配图像中各个灰度级的像素值,使得最终的灰度直方图呈现出更均匀分布的特点,从而提高图像的对比度和视觉效果。

原理灰度直方图是描述一幅图像中每个灰度级出现频次的统计直方图。

在灰度直方图均衡化过程中,首先需要计算原始图像的累积概率密度函数(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.理解图像灰度变换与直方图均衡的定义;2.掌握图像灰度变换与直方图均衡化的方法;3.学会利用matlab编程实现灰度变换和直方图均衡的方法。

二、实验内容1. 利用matlab语言直接编程实现图像的对比度调整;2. 利用matlab语言编程实现图像的反转;3. 利用matlab语言直接编程实现图像的二值化;4. 利用matlab语言直接编程实现图像的直方图均衡化处理。

三、实验步骤(一)利用matlab语言直接编程实现图像的对比度调整实验代码如下:A=imread('E:\实验报告\数字图像处理实验报告\数字图像实验报告二通信五班韩奇20110803520\lena.jpg');I=double(A);J=I*0.5+40;A1=uint8(J);figure(1);subplot(1,2,1),imshow(A);subplot(1,2,2),imshow(A1);J=I*1+40;A1=uint8(J);figure(2);subplot(1,2,1),imshow(A);subplot(1,2,2),imshow(A1);J=I*3+40;A1=uint8(J);figure(3);subplot(1,2,1),imshow(A);subplot(1,2,2),imshow(A1);J=exp(I);A1=uint8(J);figure(4);subplot(1,2,1),imshow(A);subplot(1,2,2),imshow(A1); 生成图像如下:从图中可以看出,第一幅图相对于原图的对比度降低了,第二幅图相对于原图对比度提高了40个灰度级,第三幅图对比度提高太多,效果反而不好。

在三幅图中,第二幅图视觉效果最好,对比度明显又不至于太亮。

第四幅图是指数灰度变换。

(二)利用matlab语言编程实现图像的反转实验代码如下:A=imread('E:\实验报告\数字图像处理实验报告\数字图像实验报告二通信五班韩奇20110803520\lena.jpg');E=imadjust(A,[0.35 0.65],[1 0]);figure;imshow(E);生成图像如下:从图中可以看出,原来亮的部分经过反转之后变暗,暗的部分经过反转变亮。

灰度图像处理实验报告

灰度图像处理实验报告

灰度图像处理实验报告实验背景灰度图像处理是图像处理中的一项重要任务,它通过将彩色图像转换为仅包含灰度信息的图像,从而简化图像处理的复杂度。

灰度图像处理在计算机视觉、图像识别和模式识别等领域有着广泛的应用。

实验目的本实验的目的是通过python编程实现灰度图像处理算法,包括灰度化、二值化、图像平滑以及直方图均衡化等,从而深入理解灰度图像处理的原理和算法,并掌握实现相关算法的编程技巧。

实验过程1. 数据准备在本次实验中,我们选用了一张彩色图像作为处理对象,该图像包含丰富的纹理和明暗变化。

首先,我们需要将彩色图像转换为灰度图像,以便后续的处理。

2. 灰度化灰度化将彩色图像转换为灰度图像,即将每个像素点的RGB三个分量的值按照一定的权重进行加权平均,得到对应的灰度值。

常用的加权平均法为:Gray = 0.299 * R + 0.587 * G + 0.114 * B上述公式中的0.299、0.587和0.114是经验值,表示红、绿和蓝三个分量的权重。

3. 二值化二值化将灰度图像转换为二值图像,即将每个像素点的灰度值与一个阈值进行比较,若大于阈值,则该像素点的值为255(表示白色),否则其值为0(表示黑色)。

在实际应用中,阈值的选取通常需要根据具体的图像和任务进行调整。

4. 图像平滑图像平滑是为了减少图像的噪声和细节,使得图像更加平滑,在一些图像处理任务中有着重要的应用。

常用的图像平滑算法包括均值滤波、中值滤波和高斯滤波等。

在本次实验中,我们选择了均值滤波作为图像平滑的算法,并使用一个3x3的滤波模板对图像进行卷积操作。

5. 直方图均衡化直方图均衡化是一种常用的图像增强技术,通过对图像的灰度级进行重新分配,使得原始图像中较暗的像素点和较亮的像素点在直方图上均匀分布,从而增强图像的对比度和视觉效果。

实验结果经过实验,我们得到了经过灰度化、二值化、图像平滑和直方图均衡化等处理后的图像。

与原始彩色图像相比,经过灰度化的图像丢失了颜色信息,但保留了图像的亮度信息;经过二值化的图像将图像的亮度信息进一步简化,只保留了黑色和白色两种颜色;经过图像平滑的处理,图像的细节和噪声得到了一定程度的抑制;经过直方图均衡化的处理,图像的对比度得到了显著的提升,整体的视觉效果更好。

实验一 图像的灰度变换及直方图均衡化

实验一 图像的灰度变换及直方图均衡化

实验一:图像灰度变换及直方图均衡化实验一、实验目的:1. 掌握灰度直方图的概念及其计算方法;2. 掌握利用图像灰度变换实现对图像的增强处理;3. 掌握利用直方图直方图均衡化和直方图规定化实现对图像的增强处理;4. 熟悉MA TLAB中图像增强的相关函数。

二、实验设备:1. 硬件设备:计算机;2. 软件环境:Windows+Matlab编程与仿真环境;3. 其他设备:记录用的纸、笔,以及U盘等存储设备。

三、实验原理:灰度直方图(histogram)是灰度级的函数,它表示图像中具有每种灰度级的像素的个数,反映图像中每种灰度出现的频率。

一般来说,灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的概率,是图像的最基本的统计特性。

从概率论的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数PDF(Probability Density Function),而概率分布函数就是直方图的累积和,即概率密度函数的积分。

1. 直方图均衡化直方图均衡化是通过灰度变换将一幅图像转换另一幅具有均衡直方图,即在每个灰度级上都具有相同的像素点数的过程。

设灰度变换s=T(r)为斜率有限的非减连续可微函数,它将输入图像A(x,y)转换为输出图像B(x,y),输入图像的直方图为H a(r),输出图像的直方图为H b(s),它们的关系如下:图1.1 输入图像和输出图像直方图之间的关系图直方图均衡化的基本思想是把原始图像的直方图变换成均匀分布的形式图像灰度值的动态范围,从而达到了增强图像整体对比度的效果。

具体方法为:①列出原始图像的灰度级Sk, k=0,1…L-1,其中L是灰度级的个数;②统计原始图像各灰度级的像素数目nk;③计算原始图像直方图各灰度级的频率数;④计算原始图像的累计直方图;⑤取整计算;⑥确定映射关系;⑦统计新直方图各个灰度级的像素数目nk;⑧计算新的直方图。

2. 灰度变换灰度变换是图像增强的另一种重要手段,它可使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。

数字图像处理实验二(直方图均衡化)

数字图像处理实验二(直方图均衡化)

数字图像处理实验二直方图均衡化(直方图均衡化实质上是减少图象的灰度级以换取对比度的加大)例如:假设原图的灰度分布级为126(最大为256,也就是从0到255的级上的灰度都有或多或少的出现),经过直方图均衡化后,灰度分布级别将会小于126。

编程的时候请按照直方图均衡化公式进行。

下面给出大致的编程思路和源代码:其中黑框部分需要自己编写源代码1)利用第一次实验课提供的dhc.h 和dhc.c文件以获取位图的高宽以及从文件头到实际的位图数据的偏移字节数,从而实现对位图实际数据的操作。

利用include命令#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"思考问题:#include <*.h> 和#include "*.h"在程序运行中有什么差别?2)定义结构指针struct bmphdr *hdr;定义用于直方图变量unsigned char *bitmap, new_color[256];定义计算灰度分布,灰度累计分布的数组int count[256], acum[256];3)main()函数编写//定义整数i,j 用于函数循环时的,nr_pixels为图像中像素的个数int i, j, nr_pixels;//定义两个文件指针分别用于提取原图像的数据和生成直方图均衡化后的图像FILE *fp, *fpnew;//定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处内容可以不要,在DOS下执行命令的时候再临时输入也可,为了方便演示,我这里直接把函数的参数确定了。

argc=3;argv[1]="test.bmp";argv[2]="testzf.bmp";//参数输入出错显示if (argc != 3) {printf("please input the name of input and out bitmap files\n");exit(1);}// 获取位图文件相关信息hdr = get_header(argv[1]);if (!hdr) exit(1);//以二进制可读方式打开输入位图文件fp = fopen(argv[1], "rb");if (!fp) {printf("File open error!\n");exit(1);}// 文件指针指向数据区域fseek(fp, hdr->offset, SEEK_SET);//计算位图像素的个数nr_pixels = hdr->width * hdr->height;bitmap = malloc(nr_pixels);//读取位图数据到bitmap中fread(bitmap, nr_pixels, 1, fp);fclose(fp);memset(count, 0, sizeof(count));//计算每个灰度级上像素的个数结果存入count[]数组中memcpy(acum, count, sizeof(acum));//计算灰度的累计分布for (i = 1; i < 256; i++)acum[i] += acum[i-1];//灰度直方图的均衡化(核心程序部分,请仔细分析)为了方便大家编程实现,这里直接给出了源代码,本实验最核心的部分就在这里//}//对所有的像素灰度值按照均衡化得到的灰度对应规则进行转换,结果存入bitmap[]中//fpnew = fopen(argv[2], "wb+");//由于位图文件的头部信息并没有因直方图均衡化而改变,因此输出图像的头部信息从原位图文件中拷贝即可:fwrite(hdr->signature, 2, 1, fpnew);fwrite(&hdr->size, 4, 1, fpnew);fwrite(hdr->reserved, 4, 1, fpnew);fwrite(&hdr->offset, 4, 1, fpnew);fwrite(&hdr->hdr_size, 4, 1, fpnew);fwrite(&hdr->width, 4, 1, fpnew);fwrite(&hdr->height, 4, 1, fpnew);fwrite(&hdr->nr_planes, 2, 1, fpnew);fwrite(&hdr->bits_per_pixel, 2, 1, fpnew);fwrite(&hdr->compress_type, 4, 1, fpnew);fwrite(&hdr->data_size, 4, 1, fpnew);fwrite(&hdr->resol_hori, 4, 1, fpnew);fwrite(&hdr->resol_vert, 4, 1, fpnew);fwrite(&hdr->nr_colors, 4, 1, fpnew);fwrite(&hdr->important_color, 4, 1, fpnew);if (hdr->offset > 54)fwrite(hdr->info, (hdr->offset - 54), 1, fpnew);////关闭fclose(fpnew);//释放内存(优化程序必需)free(hdr);free(bitmap);return 0;}。

数字图像处理实验一-直方图均衡化

数字图像处理实验一-直方图均衡化

实验一数字图像处理编程实习(设计性实验)一、实验名称:数字图像处理编程实验一之灰度直方图统计与均衡化。

二、实验目的和要求:本设计性实验专为印刷工程专业的《数字图像处理》课程设计。

熟悉Matlab与Visual C++编程环境,实现对输入图像进行灰度直方图均衡化处理。

通过本实验教学环节,可以使学生对图像文件格式、图像文件的读写、图像处理程序的基本结构、处理方式和编程基本方法有进一步的认识,获得对图像处理原理和编程方法的进一步认识。

实验的基本要求是:利用Matlab或Visual C++编程环境编制图像处理程序,对一幅灰度图像进行灰度直方图统计与均衡化处理。

三、实验基本内容:1.图像处理程序用户界面设计;2.灰度直方图统计与均衡化;四、实验设备及环境:1.计算机;2.Matlab与Visual C++编程环境。

五、实验原理:1、数字图像直方图均衡化处理原理:A)图像直方图统计:根据图像的灰度等级统计该灰度等级的象素个数;B)图像直方图均衡化:直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。

具体为:1)统计图像直方图;2)计算归一化的累计直方图;3)计算均衡后的直方图sk=int[(N-1)tk+0.5];4)根据均衡后的直方图将图像的每一个像素都映射到新的直方图上;六、实验具体要求:1.用户界面设计:用户界面可以自由设计,但应包括如下物件:窗体、菜单或命令按钮、图像显示框。

程序功能:图像像素行列数输入、打开图像、图像灰度直方图统计、图像灰度直方图均衡化、图像存储、退出。

七、对程序和实验报告的要求:1.将编制完成的Matlab或Visual C++程序作为附件交给实习老师;2.实验报告:所要求具有下列内容:图像处理程序编制的总体方案;程序用户界面的设计思路;图像处理算法;遇到的问题和解决过程;结果分析。

八、附件:附:实习示例程序:%《数字图像处理》课程实习%图像文件直方图统计显示实验程序by 武汉大学印刷与包装系易尧华I=imread('C:\Documents and Settings\hapxqpy\桌面\test-yy.bmp'); %将图像文件testimage.bmp的数据读入并赋值给变量I;figure(1); %新建用于图像显示的窗口;imshow(I); %在窗口中显示图像;figure(2); %新建用于图像直方图的窗口;imhist(I); %在窗口中显示图像直方图;J=histeq(I); %图像直方图均衡化处理;figure(3); %新建用于图像直方图的窗口;imshow(J); %在窗口中显示均衡化后的图像;figure(4); %新建用于显示均衡化后的图像直方图;imhist(J); %在窗口中显示均衡化后图像直方图;。

直方图均衡化实验报告

直方图均衡化实验报告

直方图均衡化实验报告直方图均衡化实验报告引言:直方图均衡化是一种常用的图像处理技术,它可以增强图像的对比度和细节,使得图像更加清晰明亮。

本实验旨在通过实际操作验证直方图均衡化的效果,并探讨其在不同场景下的应用。

实验步骤:1. 图像获取与预处理:选择一张高对比度的彩色图像作为实验对象,通过图像处理软件将其转换为灰度图像。

确保图像的亮度范围适中,避免过亮或过暗的情况。

2. 直方图均衡化算法:实现直方图均衡化算法的代码,可以使用Python等编程语言。

算法的核心思想是将原始图像的像素值映射到新的像素值,使得新图像的直方图均匀分布在整个灰度范围内。

3. 实验结果展示:将经过直方图均衡化处理后的图像与原始图像进行对比展示。

通过观察图像的对比度、亮度和细节等方面的变化,评估直方图均衡化算法的效果。

实验结果与分析:经过直方图均衡化处理后,图像的对比度明显增强,细节更加清晰可见。

原本过亮或过暗的区域得到了适当的修正,使得整个图像的亮度分布更加均匀。

同时,图像中的细节也得到了突出,使得观察者能够更好地识别和分析图像中的内容。

在实际应用中,直方图均衡化可以用于图像增强、目标检测、图像匹配等领域。

例如,在安防监控系统中,直方图均衡化可以提高图像的对比度,使得目标物体更加明显,有利于目标检测和识别。

在医学图像处理中,直方图均衡化可以增强图像的细节,有助于医生对病灶的判断和诊断。

然而,直方图均衡化也存在一些局限性。

首先,直方图均衡化是一种全局操作,对整个图像进行处理,可能会导致某些局部细节的损失。

其次,直方图均衡化对于亮度变化较大的图像效果较差,可能会导致过度亮化或过度暗化的问题。

因此,在实际应用中,需要根据具体情况选择合适的图像处理方法。

结论:通过本次实验,我们验证了直方图均衡化在图像处理中的有效性。

直方图均衡化可以增强图像的对比度和细节,使得图像更加清晰明亮。

然而,直方图均衡化也存在一些局限性,需要根据具体情况选择合适的图像处理方法。

数字图像处理实验二图像灰度直方图实验

数字图像处理实验二图像灰度直方图实验

课程名称数字图像处理与分析实验序号实验二实验项目图像灰度直方图实验实验地点实验学时实验类型指导教师实验员专业班级学号姓名年月日分析:由生成的图像可知,索引图比灰度图的灰度等级更大,颜色更暗,二值图像只能描述其轮廓,不能描述细节。

代码:clear ; %清除内存原有一切变量RGB=imread('gou.jpg');[X1,map]=rgb2ind(RGB,64);I=rgb2gray(RGB); %把RGB图变为灰度图X2=rgb2ind(RGB,map);subplot(2,2,1),imshow(RGB);title('yuantu');subplot(2,2,2),imshow(I);title('graytu'); %显示灰度图subplot(2,2,3),imshow(X1,map);title('x1map');subplot(2,2,4),imshow(X2,map);title('x2map');运行结果:分析:由生成的图像可知,RGB图转换灰度图失败,不清楚原因,但是代码没有问题;由RGB转换的两张索引图和原图没有肉眼可识别的差别。

2、计算出一幅灰度图像的直方图代码:clear;close all;RGB=imread('gou.jpg'); % 把RGB图读入矩阵I=rgb2gray(RGB); %把RGB图变为灰度图imhist(I);title('实验1 直方图');运行结果:分析:灰度图较暗,因此灰度直方图像素灰度值取在左边较暗的区域。

3、对灰度图像进行简单灰度线形变换代码:RGB=imread('gou.jpg');I=rgb2gray(RGB);subplot(2,2,1),imshow(I);subplot(2,2,2),imhist(I);J=histeq(I);subplot(2,2,3),imshow(J);subplot(2,2,4), imhist(J); title('实验2 -直方图均衡化');运行结果:分析:由生成的图像可知,原始图像较暗且动态范围较小,反应在直方图上就是直方图所占据的灰度值范围比较窄,且集中在低灰度值一边。

浅析灰度图像的直方图均衡化处理

浅析灰度图像的直方图均衡化处理

浅析灰度图像的直方图均衡化处理作者:孔繁庭来源:《数字技术与应用》2014年第12期摘要:图像增强是指按特定的需要采用特定方法突出图像中的某些信息,同时削弱或去除无关信息,或将原图转换成一种更适合人或机器进行分析处理的形式的图像处理方法,图像增强的算法和方法很多,效果也不同。

本文提出了自适应动态峰值剪切直方图均衡化算法,实验结果表明自适应动态峰值剪切直方图均衡化算法对灰度图像的增强取得了较好的增强效果,使得图像质量得到了有效的提高。

关键词:图像增强直方图均衡化自适应动态峰值剪切中图分类号:TP391.41 文献标识码:A 文章编号:1007-9416(2014)12-0225-011 图像增强在拍摄图像的过程中,由于光源等问题的影响,图像质量很肯能受到影响而偏低。

为了使这类图像的质量提高,视觉效果进行改善,需要对图片进行增强处理。

图像增强是图像处理的方法之一,且操作相对简单。

常见的图像增强方法包括:噪声去除、图像锐化、几何畸变校正、灰度变换、直方图均衡化、频域滤波等。

根据处理图片的空间不同,我们将图像增强分为两类:频率域图像增强以及空间域图像增强。

2 灰度图像的直方图均衡化算法灰度图像对比度增强是图像增强方法的一种,目的在于对整体或者局部的反差程度进行调节,从而使图像质量得以提高。

对比度增强在近几年的关注度不断提高,常见的对比度增强的方法包括全局处理以及区域自适应处理方法。

而全局处理方法中又包括直方图均衡化以及伽马矫正。

灰度图像的直方图均衡化算法主要包括:传统直方图均衡化算法、基于图像均值分割的亮度均值稳定性的直方图均衡化算法、等面积的双子图像直方图均衡化算法、RMSHE算法和RSmE算法、BHEPL 算法等等。

本文主要介绍了自适应动态峰值剪切直方图均衡化算法。

3 自适应动态峰值剪切直方图均衡化算法在传统的直方图均衡化处理中存在导致一些退化效应,如灰度图像部分出现过度增强和光晕。

相关学者提出,直方图均衡化处理的退化效应的原因在于在对图像进行均衡化处理时灰度图像的灰度均值被搬移导致的,所以可以通过对加强灰度图像处理前后的灰度均值稳定性来解决该问题。

灰度图像的直方图均衡化处理研究

灰度图像的直方图均衡化处理研究

灰度图像的直方图均衡化处理研究一、本文概述随着图像处理技术的飞速发展,直方图均衡化作为一种经典的图像增强方法,在改善图像质量和提升视觉效果方面发挥着重要作用。

本文旨在深入研究灰度图像的直方图均衡化处理,通过对其原理、方法和应用效果的详细阐述,为相关领域的研究者和实践者提供有益的参考和启示。

本文将简要介绍直方图均衡化的基本原理和目的,阐述其在灰度图像处理中的适用性和优势。

接着,文章将重点探讨直方图均衡化的实现方法,包括灰度图像的预处理、直方图计算、累积分布函数计算以及映射表生成等关键步骤。

本文还将对直方图均衡化后的图像效果进行分析和评价,包括对比度提升、细节增强以及噪声影响等方面的讨论。

本文将总结直方图均衡化在灰度图像处理中的实际应用和前景展望,以期为推动图像处理技术的发展和应用做出贡献。

通过本文的研究,读者可以深入了解直方图均衡化的基本原理和实现方法,掌握其在灰度图像处理中的应用技巧,为实际工作和研究提供有益的参考和指导。

二、灰度图像与直方图均衡化基础灰度图像是一种只包含亮度信息而不包含颜色信息的图像。

在灰度图像中,像素值通常使用一个8位(或称为1字节)的整数表示,范围从0到255,其中0表示黑色,255表示白色,中间的数值表示不同的灰度级别。

灰度图像在计算机视觉和数字图像处理中扮演着重要角色,因为它们简化了图像数据,同时保留了足够的信息来进行许多图像处理任务。

直方图均衡化是一种提高图像对比度的方法,特别适用于改进图像的可用数据范围。

它通过拉伸像素强度分布来增强图像的对比度。

直方图均衡化的基本思想是将原始图像的灰度直方图从较为集中的某个灰度区间变成在全部灰度范围内的均匀分布。

这样,原来图像中灰度相近的区域在增强后图像的灰度差别增大,从而提高图像的对比度。

直方图均衡化的数学过程可以描述为:首先计算原始图像的直方图,即每个灰度级出现的频率;然后根据这些频率计算一个累积分布函数(CDF);使用CDF对原始图像的每个像素进行变换,得到均衡化后的图像。

python实现灰度图像直方图统计与均衡化

python实现灰度图像直方图统计与均衡化

原创 python实现:灰度图像直方图统计与均衡化代码如下,重构过两次,使用面向对象设计,最后是效果图。

(原参考的代码是过程化的,并且命名比较难懂,我改进了一把)# coding=utf-8import cv2.cv as cvclass Image:def__init__(self,imagePath=None,imageData=None):if imagePath is not None:self.image = self._readImage(imagePath)returnif imageData is not None:self.image = imageDatareturndef _readImage(self,imagePath):return cv.LoadImage(imagePath,0)def show(self,windowName):cv.ShowImage(windowName, self.image)class Histogram:def __init__(self,image):self.image = imagedef _getIntensiveCount(self):analyst = Analyst()return analyst.getIntensiveCount(self.image)def _draw(self,lineColor):intensiveCount = self._getIntensiveCount()painter = Painter()returnpainter.drawPictureFromData(intensiveCount,lineColor) def show(self,windowName,lineColor):histogram = self._draw(lineColor)cv.ShowImage(windowName, histogram)class Accumulate:def __init__(self,image):self.image = imagedef _getIntensiveAccumulate(self):analyst = Analyst()return analyst.getIntensiveAccumulate(self.image) def _draw(self,lineColor):intensiveAccumulate =self._getIntensiveAccumulate()painter = Painter()returnpainter.drawPictureFromData(intensiveAccumulate,line Color)def show(self,windowName,lineColor):accumulate = self._draw(lineColor)cv.ShowImage(windowName, accumulate)class Equalizer:INTENSIVE_COUNT = 256INTENSIVE_RANK = 255def __init__(self,image):self.image = imagedef equalize(self):size = (self.image.width,self.image.height)depth = self.image.depthchannels = 1pixelCount = self.image.width * self.image.height equalizedImg = cv.CreateImage(size, depth, channels)accumulate =Analyst().getIntensiveAccumulate(self.image)probablity = accumulate[:]#注意,这里的pixelCount也可以用max(accumulate)得到for i in range(self.INTENSIVE_COUNT):#这里乘1.0是为了避免自动识别为整除probablity[i] = probablity[i]*1.0/pixelCountmapRelation = [0]*self.INTENSIVE_COUNTfor i in range(self.INTENSIVE_COUNT):mapRelation[i] =int(probablity[i]*self.INTENSIVE_RANK)for i in range(self.image.height):for j in range(self.image.width):equalizedImg[i,j] =mapRelation[int(self.image[i,j])]return equalizedImgclass Analyst:INTENSIVE_COUNT = 256def getIntensiveCount(self,image):intensiveCount = [0]*self.INTENSIVE_COUNTfor i in range(image.height):for j in range(image.width):intensiveValue = int(image[i,j])intensiveCount[intensiveValue] += 1return intensiveCountdef getIntensiveAccumulate(self,image):intensiveCount = self.getIntensiveCount(image) accumulate = intensiveCount[:]for i in range(1,self.INTENSIVE_COUNT):accumulate[i] = accumulate[i] + accumulate[i-1]return accumulateclass Painter:DRAW_DEPTH = 8DRAW_CHANNELS = 3DRAW_SIZE = (256,256)INTENSIVE_RANK = 255INTENSIVE_COUNT = 256def drawPictureFromData(self,data,lineColor):image = cv.CreateImage(self.DRAW_SIZE,self.DRAW_DEPTH, self.DRAW_CHANNELS)highest = max(data)for i in range(self.INTENSIVE_COUNT):#这里乘1.0是为了避免自动识别为整除#这句话的用意是为了拉伸图像,使其最大限度地布满画布data[i] = (data[i] * 1.0 / highest) *self.INTENSIVE_RANKdata[i] = int(data[i])bottomPoint = i, self.INTENSIVE_RANKtopPoint = i, self.INTENSIVE_RANK - data[i]cv.Line(image, bottomPoint, topPoint, lineColor) return imageif __name__ == "__main__":image = Image(imagePath='lena.jpg')image.show('original')Histogram(image.image).show('histogram',cv.RGB(0, 255, 0))Accumulate(image.image).show('accumulate',cv.RGB(0, 255, 0))equalizedImg =Image(imageData=Equalizer(image.image).equalize()) equalizedImg.show('equalized')Histogram(equalizedImg.image).show('ehistogram', cv.RGB(0, 0, 255))Accumulate(equalizedImg.image).show('eaccumulate', cv.RGB(0, 0, 255))cv.WaitKey(0)。

灰度图像的直方图均匀化

灰度图像的直方图均匀化

数字图像处理实验报告姓名:冯玉平学号: 1203210014 指导老师:吕建平完成时间: 2013年6月实验二 灰度图像的直方图均匀化一、实验任务⑴ 进一步掌握灰度图象直方图的概念,性质⑵ 对一幅灰度图象实现直方图均衡化,对比修正前后的图像效果 ⑶ 通过Matlab 或VC++开发环境,编程实现灰度图象的直方图均匀化处理。

二、实验条件微机一台、vc++6.0或matlab 集成开发环境。

三、实验原理直方图均衡也称灰度均衡,目的是通过点运算使输入图像转换为在每一灰度级上都有相同的像素点数的输出图像(即输出的直方图是平的)。

按照图像的概率密度函数的定义:00()AD MAXB A i i D D f D H A ===∑01()()p x H x A =其中()H x 为直方图,0A 为图像的面积。

设转换前图像的概率密度函数为()r p r ,转换后图像的概率密度函数为()s p s ,转换函数为()s f r =。

由概率论知识,我们可以得到:()()s r drp s p r ds = 这样,如果想使转换后的图像的概率密度函数为1(即直方图为平的),则必须满足:()r dsp r dr =等式两边对r 积分,可得:0001()()()rrr s f r P u du H u duA ===⎰⎰该转换公式被称为图像的累积分布函数。

直方图均衡的转换公式为:()()AD MAXB A D D f D H u duA ==⎰对于离散图像,转换公式则为:()AD MAXB A ii D D f D HA ===∑四、实验步骤⑴ 实现灰度图像读取、保存模块; ⑵ 编程实现图像的直方图均衡。

五、实验程序I=imread('图片2.bmp'); %读取图像d=imresize(I,[256 256]); %转换成要求的大小 J=rgb2gray(d); %转换成二维灰度图 K=histeq(J); %直方图均衡化figure; %显示原图像和均衡后的的图像 subplot(121),imshow(J); subplot(122),imshow(K);figure; %显示原图像和均衡化后图像的直方图 subplot(121),imhist(J,64); subplot(122),imhist(K,64)(程序补充说明:由于我的电脑保存下来的原图是三维的,所以要先转换成二维的)六、实验结果图原图像和均衡后的的图像原图像和均衡化后图像的直方图七、实验心得1、多动手,多查阅有关书籍2、编程过程中要细心,认真修改出错的地方3、数字图像处理是一门很趣的学科,我个人很喜欢。

实验二灰度直方图及直方图均衡化

实验二灰度直方图及直方图均衡化

实验二灰度直方图及直方图均衡化一、实验目的1. 直方图的显示2. 计算并绘制图像直方图3. 直方图的均衡化二、实验内容灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。

MATLAB 中提供了专门绘制直方图的函数imhist()。

1. 直方图的显示imshow('F:\标准图片\baboon.tif');title('原图像')%显示原图像A=imread('F:\标准图片\baboon.tif');figure;imhist(A);title('对应直方图')原图像500100015002000250030003500对应直方图0501001502002502. 计算并绘制图像直方图A :用bar 函数显示A=imshow('F:\标准图片\baboon.tif');h=imhist(A);h1=h(1:10:256);horz=1:10:256;bar(horz,h1)%用bar 函数显示axis([0 255 0 15000])%设置水平轴和垂直轴的最大值和最小值set(gca,'xtick',0:50:255)set(gca,'xtick',0:2000:15000)用bar 函数显示图像0050001000015000B :用stem 函数显示A=imshow('F:\标准图片\baboon.tif');h=imhist(A);h1=h(1:10:256);horz=1:10:256;stem(horz,h1,'fill')%用stem 函数显示axis([0 255 0 15000])%设置水平轴和垂直轴的最大值和最小值set(gca,'xtick',[0:50:255])set(gca,'xtick',[0:2000:15000])用stem 函数显示050001000015000B :用plot 函数显示A=imshow('F:\标准图片\baboon.tif');h=imhist(A);plot(h)axis([0 255 0 15000])%设置水平轴和垂直轴的最大值和最小值set(gca,'xtick',[0:50:255])set(gca,'xtick',[0:2000:15000])用plot 函数显示0500010000150003. 直方图均衡化imshow('F:\标准图片\baboon.tif');title('原图像')I=imread('F:\标准图片\baboon.tif ','tif');figure;imhist(I),title('对应直方图')%从得到的直方图可以看出,图像的对比度很低,灰度级集中在70-160 范围内, 如果只取%这个范围内的灰度,并扩展到[0,255],则会明显增强图像对比度J=imadjust(I,[70/255 160/255],[]);figure;imshow(J),title('经灰度级调整后的图')figure;imhist(J),title('灰度级调整后的直方图')%MATLAB 还提供了histeq 函数(自动直方图均衡化)K=histeq(I);figure;imshow(K),title('经直方图均衡化后的图')figure;imhist(K),title('直方图均衡化后的直方图')原图像500100015002000250030003500对应直方图050100150200250经灰度级调整后的图10002000300040005000600070008000900010000灰度级调整后的直方图050100150200250经直方图均衡化后的图0500100015002000250030003500400045005000直方图均衡化后的直方图050100150200250。

实验2(A) 灰度图像直方图统计与均衡化

实验2(A) 灰度图像直方图统计与均衡化

实验2(A) 灰度图像直方图统计与均衡化实验2 灰度图像直方图统计与均衡化实验目的学习灰度图像直方图的概念、计算方法、性质和相关应用。

利用VC++编写灰度图像直方图统计程序。

掌握灰度直方图的概念及其计算方法;熟练掌握直力图均衡化和直方图规定化的计算过程;熟练掌握空域滤波中常用的平滑和锐化滤波器;掌握色彩直方图的概念和计算方法利用VC++程序进行图像增强。

实验原理灰度直方图是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像中每种灰度出现的频率。

式中,n是图像总的像素个数;ni是图像中具有第i个灰度级的像素个数;vi是第i个灰度级出现的频率。

依据定义,若图像具有L级灰度,通常L=256,即8位灰度级,则大小为M′N 的灰度图像f(x, y)的灰度直方图hist[0, …, L-1]可用如下步骤计算获得:初始化,hist[k]=0 ; k=0, 1, …, L-1。

按像素扫描图像,对灰度级中的每个灰度值,统计图像中具有该灰度值的像素个数。

直方图归一化。

图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。

其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。

图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。

本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行联系。

直方图是多种空间城处理技术的基础。

直方图操作能有效地用于图像增强。

除了提供有用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。

直方图在软件中易于计算,也适用于商用硬件设备,因此,它们成为了实时图像处理的一个流行工具。

直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。

直方图均衡化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。

灰度变换和直方图均衡化

灰度变换和直方图均衡化

100200300010*******100200300050100150实验三 图像点运算f=imread('lena.bmp'); g=power(double(f),0.8); x=0:255; y=x.^0.8;imwrite(uint8(g),'lena_d1.bmp'); figure(1); subplot(2,2,1); imshow(f); subplot(2,2,2); imshow(g,[0 255]); subplot(2,2,3); plot(x,y);clcf=imread('lena.bmp'); g=f/2;figuresubplot(121)imshow(f)subplot(122)imshow(g,[0 255])imwrite(uint8(g),'lena0.5.bmp')h=zeros(1,256); [row,col]=size(f); for i=1:row; for j=1:col;h(f(i,j)+1)=h(f(i,j)+1)+1; endend g=imread('lena0.5.bmp');x=zeros(1,256);[row,col]=size(g);for i=1:row; for j=1:col;x(g(i,j)+1)=x(g(i,j)+1)+1; end end figure subplot(121) bar(h)subplot(122) bar(x) clcf=imread('lena.bmp');010********50010001500200025003000010020030020004000600080001000012000g=power(double(f),0.8)+100; imwrite(uint8(g),'lena0.8.bmp')figuresubplot(121) imshow(f) subplot(122)imshow(g,[0 255])imwrite(uint8(g),'lena0.5.bmp')h=zeros(1,256); [row,col]=size(f); for i=1:row; for j=1:col;h(f(i,j)+1)=h(f(i,j)+1)+1; end endg=imread('lena0.5.bmp'); x=zeros(1,256); [row,col]=size(g); for i=1:row; for j=1:col;x(g(i,j)+1)=x(g(i,j)+1)+1; end end figuresubplot(121) bar(h)subplot(122) bar(x)实验三 图像点运算一、实验目的理解图像灰度变换和直方图的概念,掌握灰度变换和直方图均衡化的原理及实现方法。

灰度图像直方图均衡化变换函数算法.docx

灰度图像直方图均衡化变换函数算法.docx

灰度图像直方图均衡化变换函数算法方案一:1) 灰度图像直方图均衡化算法步骤:1、列出原始图像和变换后图像的灰度级I: j = 0, 1, -L-1,其中L是灰度级的个数;2、统计原始图像个灰度级的像素个数Ni;3、计算原始图像直方图:p(i)=Ni/N,N为原始图像像素总数;4、计算累计直方图P j =》p(k), k二0, l・・・j;5、利用灰度变换函数计算变换后的灰度值,并四舍五入:j=INT[(L-l)Pj+0. 5];6、确定灰度变换关系i->j,据此将原图像的灰度值f(m, n) = i修正为g(m, n)=j;7、统计变换后各灰度级的像素个数Nj;8、计算变换后图像的直方图p(j)二Nj/N;2) m文件I=imread('football.jpg 1 );1=1(:, :,1);[m z n]=size (I);num=m*n;pre_mat=zeros(1,256);aft_mat=zeros(1,256);for i=l:mfor j=l:npre_mat(I(i z j)+1)= pre_mat(I(i z j)+1)+1;endendaft_mat (I) =aft_mat (I) /num;for k=2:256s (k) =pre_mat (k) /num;aft_mat (k) =aft_mat (k-l) + s (k);endM=zeros(叫n);aft_mat=aft_mat*255;for i=l:mfor j=l:nM(i z j)=aft_mat(I (i,j)+1);endendJ=uint8(M)subplot (3,2f l)imshow(I);1.原始图像T;subplot (3,2,2) imhist(I);title(*2.原始图像直方图'); subplot(3,2^3) imshow(J);title (! 3.均衡化图像'); subplot (3,2,4) imhist(J);title 「4 •均衡化图像直方图*);A=histeq(I); subplot(3,2^5) imshow(A);title(*5.系统均衡化图像T ; subplot (3,2,6) imhist(A);title 「6・系统均衡化图像直方图1)经实际验证:该方案对黑白图片均衡化处理有较好的效果。

图像直方图均衡实验

图像直方图均衡实验

/*初始化直方图背景为白色*/CvScalar white;white.val[0]=255;for(int i=0;i<dst->height;i++){for(int j=0;j<dst->width;j++){cvSet2D(dst, i, j, white);}}/*绘制横竖坐标*/CvScalar black;black.val[0] = 0;for(int i=0;i<280;i++){cvSet2D(dst, 280, i+10, black);}for(int i=0;i<280;i++){cvSet2D(dst, i+10, 20, black);}/*绘制直方图*/for(int i=0;i<256;i++){int high = count[i]*256/max;int x=20+i;for(int j=0;j<high;j++){int y=280-j;cvSet2D(dst, y, x, black);}}return dst;}实验结果如下图所示:2.通过计算归一化直方图,设计算法实现直方图均衡化处理。

核心代码如下:IplImage* Equalization(IplImage *src){IplImage* dst = cvCreateImage(cvGetSize(src),3.在灰度图像直方图均衡处理的基础上实现彩色直方图均衡处理。

核心代码如下:IplImage* ColorEqualization(IplImage *src){IplImage *dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);IplImage *pImageChannel[3] = {NULL};int i;for (i=0; i<3; i++) {pImageChannel[i] = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);}cvSplit(src, pImageChannel[0], pImageChannel[1], pImageChannel[2], NULL);for (i=0; i<src->nChannels; i++) {pImageChannel[i] = Equalization(pImageChannel[i]);}/*三通道合并*/cvMerge(pImageChannel[0], pImageChannel[1], pImageChannel[2], NULL, dst);return dst;}实验结果如下图所示:。

大学认识实习(图像直方图均衡化)报告

大学认识实习(图像直方图均衡化)报告
[J,T] =histeq(I);%图像均衡化函数
subplot(2,2,3);
imshow(J)
title('均衡化后的图象');
subplot(2,2,4);
imhist(J);%画出灰度图像的直方图
title('均衡化后的直方图');
3程序分析
该段程序比较简洁,主要直接调用系统函数来直接实现相关功能,首先利用imread()函数来读取miss1.jpg图像的像素的灰度值,并作为向量存放在I中,利用imhist直接绘出初始图像像素的直方图。通过调用histeq()函数来实现图像的均衡化,并利用同样的方式来显示图像以及均衡化后的图像直方图。
②中兴通讯股份有限公司南京研发中心介绍
中兴通讯股份有限公司南京研发中心成立于1993年9月,是中兴通讯全球15个研发机构之一,是中兴通讯重要的研发基地,承担着中兴通讯大型交换系统、数据网络、网络增值业务以及面向未来的网络核心设备等重要的研发任务。南京研发中心已入驻人员1.3万余人。
中兴通讯一区一期项目占地120亩,于2001年3月投资建设,2002年2月竣工并投入使用,建筑面积4.5万平方米;中兴通讯一区二期项目占地87亩,于2005年7月开工建设,2006年11月南楼建成投入使用,2009年12月北楼建成投入使用,总建筑面积约6万平方米。中兴二区占地面积约574亩,计划投资11.88多亿元人民币,一期建筑面积约20万平方米已经入驻。南京研发中心目前已成为国内最大的以未来通讯为核心的生产、研发基地,也是作为向国际市场展示的中心,邀请各国政要到研发基地考察,并与国内外技术专家进行研发合作。另外,随着3G网络建设的全面展开,除原有的产品继续在南京当地实现相关的产值与税收外,3G核心网相关的全系列软件产品,亦落地南京,将实现相当的产值和税收。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

for( x = 0; x < n; x++ )
{
T[x] = (uchar) (255 * nn[x] / sum);
// range is [0,255]
}
dst = cvCloneImage( src );
T_mat = cvCreateMatHeader( 1, 256, CV_8UC1 );
直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度 级上都具有相同的象素点数的过程。
三、 实验步骤
1. 用 VC++编写(参照附录编程指南)显示直方图的程序 真彩色图像直方图统计的程序可以用以下伪代码表示:
HistogramStat(bCount[], gCount[], rCount[])
解:可以用来对图像进行均衡化处理,提升图像的对比对。
3. 在本次实习的基础上,试编写直方图均衡的程序。
(见代码段)
4. 直方图是什么概念?它反映了图像的什么信息?
解:直方图(Histogram)又称柱状图、质量分布图。是一种统计报告图,由一系列高度不
等的纵向条纹或线段表示数据分布的情况。它反映了图象中具有每种灰度级的象素的个
1. 计算机;
2. VC 程序;
3. 移动式存储器(软盘、U 盘等)。
4. 记录用的笔、纸。
五、 实验报告内容
1. .叙述操作过程
解:1)读入图像,数据初始化;2)统计直方图信息;3)计算并显示图像的灰度直方
图;4)对图像进行归一化处理;5)均衡化操作;6)显示、释放空间。
2.
提交实验的原始图像和直方图图像,以及直方图均衡化之后图像。
直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。直方图均衡 化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态, 增强图像的视觉效果。灰度直方图是图像预处理中涉及最广泛的基本概念之一。
图像的直方图事实上就是图像的亮度分布的概率密度函数,是一幅图像的所有象素集合 的最基本的统计规律。直方图反映了图像的明暗分布规律,可以通过图像变换进行直方图调 整,获得较好的视觉效果。
(0.2)
3. 直方图归一化。
hist f x, y M N vi ni n
(0.3)
图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要
的信息的处理方法。其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。
图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。
3
六、 思考题
1. 灰度直方图可以反映出一幅图像的哪些特性?
解:1)表征了图像的一维信息。反映图像中像素不同灰度值出现的次数(或频数)。2)
与图像之间的关系是多对一的映射关系。一幅图像唯一确定出与之对应的直方图,但不
同图像可能有相同的直方图。
2. 灰度直方图有何用途?编程实现一种灰度直方图应用的程序。
图像 f(x, y)的灰度直方图 hist[0, …, L-1]可用如下步骤计算获得:
① 初始化,hist[k]=0 ; k=0, 1, …, L-1。
② 按像素扫描图像,对灰度级中的每个灰度值,统计图像中具有该灰度值的像素个数。
hist f x, y ; x 0,1, , M 1; y 0,1, , N 1
本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行
联系。
1
直方图是多种空间城处理技术的基础。直方图操作能有效地用于图像增强。除了提供有 用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压 缩与分割。直方图在软件中易于计算,也适用于商用硬件设备,因此,它们成为了实时图像 处理的一个流行工具。
cvCalcHist( &src, hist, 0, 0 );
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
// 只找最大值
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 ); // 缩放 bin 到区
间 [0,255]
cvZero( histimg );
bin_w = histimg->width / n; //则 bin_w 为条的宽度
for( i = 0; i < HDIM; i++ )
{
double val = ( cvGetReal1D(hist->bins,i)*histimg->height/255 );
{
// 赋初值,bCount,gCount,rCount 分别为蓝色、绿色、红色分量统计的结果
bCount[0:255] = 0;
gCount[0:255] = 0;
rCount[0:255] = 0;
// 统计各个灰度级像素的个数
for i = 0:nHeight
// nHeight 为图像高度
for j = 0:nWidth
6
数,图象中每种灰度出现的频率。
5. 直方图均衡化是什么意思?它的主要用途是什么?
解:直方图均衡化是通过灰度变换将一幅图象转换为另一幅具有均衡直方图,即在每个
灰度级上都具有相同的象素点数的过程。它主要用来增强图像的对比度。
七、实验代码:#include "cv.h" #include "highgui.h" #include <stdio.h> #include <ctype.h> #define HDIM 256 int main( int argc, char** argv ) {
cvNamedWindow( "result", 0 );
// 计算直方图
hist = cvCreateHist( 1, &n, CV_HIST_ARRAY, &hranges, 1 );
histimg = cvCreateImage( cvSize(320,200), 8, 3 );
cvZero( histimg );
// nWidth 为图像宽度
{ blue, green, red;
// 获取第 i 行、第 j 列的蓝色、绿色和红色分量
bCount[blue] ++;
gCount[green] ++;
rCount[red] ++;
}
2
}
}
2. 用 VC++编写直方图均衡化的程序
3. 记录和整理实验报告
四、 实验仪器
CvScalar color = CV_RGB(255,255,0);
cvRectangle(histimg,cvPoint(i*bin_w,histimg->height),cvPoint((i+1)*bin_w,(int)(histimg->h
eight - val)),color, 1, 8, 0 );
cvቤተ መጻሕፍቲ ባይዱetData( T_mat, T, 0 ); // 直接调用内部函数完成
cvLUT( src, dst, T_mat );
5
//显示 cvShowImage( "src", src ); cvShowImage("Histogram",histimg); cvShowImage( "result", dst ); cvWaitKey(0); cvDestroyWindow("source");//销毁 cvDestroyWindow("result"); cvDestroyWindow("Histogram"); cvReleaseImage( &src );//释放 cvReleaseImage( &dst ); cvReleaseHist ( &hist ); cvReleaseImage(&histimg); return 0; }
实验 2 灰度图像直方图统计与均衡化
一、 实验目的
1. 学习灰度图像直方图的概念、计算方法、性质和相关应用。 2. 利用 VC++编写灰度图像直方图统计程序。 3. 掌握灰度直方图的概念及其计算方法; 4. 熟练掌握直力图均衡化和直方图规定化的计算过程; 5. 熟练掌握空域滤波中常用的平滑和锐化滤波器; 6. 掌握色彩直方图的概念和计算方法 7. 利用 VC++程序进行图像增强。
IplImage *src = 0, *dst = 0; CvHistogram *hist = 0; IplImage *histimg = 0; int n = HDIM; double nn[HDIM]; uchar T[HDIM]; CvMat *T_mat; float hranges_arr[] = {0,255}; float* hranges = hranges_arr; int bin_w; float max_val; int i;
二、 实验原理
灰度直方图是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像中每种 灰度出现的频率。
vi ni n
(0.1)
式中,n 是图像总的像素个数;ni 是图像中具有第 i 个灰度级的像素个数;vi 是第 i 个灰度级 出现的频率。
依据定义,若图像具有 L 级灰度,通常 L=256,即 8 位灰度级,则大小为 MN 的灰度
//灰度级数
4
int x;
int sum = 0;
相关文档
最新文档