实验2(A) 灰度图像直方图统计与均衡化
- 格式:doc
- 大小:1.37 MB
- 文档页数:6
图像直方图均衡化原理
图像直方图均衡化是一种常用的图像增强方法,通过调整图像的像素灰度分布,使得图像的对比度增强、细节更加清晰。
其原理主要分为以下几个步骤:
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 -直方图均衡化');运行结果:分析:由生成的图像可知,原始图像较暗且动态范围较小,反应在直方图上就是直方图所占据的灰度值范围比较窄,且集中在低灰度值一边。