数字图像处理灰度实验.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字图像处理灰度实验

数 字 图 像 处 理 实 验 报 告 学院: 专业: 姓名: 学号: 直方图和直方图均衡化 一、实验目的 1. 改善图像的视觉,提高清晰度; 2. 增强人们感兴趣部分,到视觉效果更好的图像,以提高图像的可懂度。 3、增强直方图均衡化的认识和了解 二、实验原理 直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设非均匀直方图分布函数P r(r)经转换函数s=T(r)转化为均匀直方图分布函数Ps(s)的情况,r为变化前的归一化灰度级,0≤r≤1. T(r)为转换函数, s=T(r)为变化后的归一化灰度级,则T(r)应满足以下条件: (1)在0≤r≤1,范围内是一个单值单增函数。 (2)对于0≤r≤1,对应有0≤s=T(r)≤1.保证变换后像素灰度级仍在允许范围内。 在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化 三、实验主要内容 统计原始图像的直方图,求出 2、用累积分布函数作变换,求变换后的新灰度; 3、用新灰度代替旧灰度,求出,这一步是近似的,力求合理,同时把灰度相等的或相近的合在一起。 四、实验程序及结果 1、实验程序 #includestdio.h #includemath.h #includestdlib.h void main() { int c,i=0,j=0,y; long sum=0,su=0,k=0,l=0,t=0,h=0; static int a[256],a1[256],b[256],s[256],d[256][256],d1[65536],B[256][256],d2[65536]; FILE *fp,*fp1; char filename[20],filename1[20]; double p1[256],p2[256]; printf( 输入文件名:); scanf(%s,filename); printf( 输入新的文件名:); scanf(%s,filename1); if ((fp=fopen(filename,rb))==0) {printf(不能打开文件\n); exit(0); } fp1=fopen(filename1,w); while(!feof(fp)) {c=fgetc(fp); a[c]++; } rewind(fp); while(!feof(fp)) {c=fgetc(fp); d2[t]=c; t++; } t=0; for(i=0;i256;i++) for(j=0;j256;j++) { B[i][j]=d2[t]; t++; } for(i=0;i256;i++) printf(%d\t,a[i]); printf(\n); for(i=0;i256;i++) {sum=sum+a[i]; } printf(%d\n,sum); for(i=0;i256;i++) { p1[i]=a[i]/65536.0; } p2[0]=p1[0]; for(i=1;i256;i++) { p2[i]=p2[i-1]+p1[i]; } for(i=0;i256;i++) { s[i]=(int)(p2[i]*255+0.5); } for(i=0;i256;i++) for(j=0;j256;j++) { d[i][j]=0; } for(i=0;i256;i++) { for(j=0;j256;j++) { y=B[i][j]; d[i][j]=s[y]; } } for(i=0;i256;i++) for(j=0;j256;j++) { d1[h]=d[i][j]; h++; } for(i=0;i256;i++) { b[i]=0; } for(i=0;i256;i++) { for(j=0;j256;j++) if(i==s[j]) b[i]=b[i]+a[j]; } printf(输出\n); for(i=0;i255;i++) {

文档评论(0)

docindpp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档