c语言直方图(共6页).doc

上传人:飞****2 文档编号:14105985 上传时间:2022-05-02 格式:DOC 页数:6 大小:613.50KB
返回 下载 相关 举报
c语言直方图(共6页).doc_第1页
第1页 / 共6页
c语言直方图(共6页).doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《c语言直方图(共6页).doc》由会员分享,可在线阅读,更多相关《c语言直方图(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 基于c语言的直方图增强与二值化#include #include #include #include #include unsigned char *get_matrix_space(int m,int n)/定义指向指针型函数get_matrix_space用于分配内存空间int i;unsigned char *a;a=(unsigned char *)calloc(m,sizeof(unsigned char *);/分配m个长度等于无符号字符型指针的长度的指向指针变量afor(i=0;im;i+)ai=(unsigned char *)calloc(n,si

2、zeof(unsigned char);/分配n个长度等于无符号字符型的长度的指针数组aireturn a;/返回指向指针指针变量a void main()FILE *fs,*ft,*tx;/定义文件指针fs和ftchar c1,c2;/定义两个字符变量c1和c2int width,height,L,i,j,max,min;/定义整型变量:图像宽度width,图像高度height,变量L、I、J,最大值max,最小值minint n256=0;/定义一个长度为256的整型数组nint m256=0;int h256=0;int jun;double p256=0;/定义一个长度256双精度整型

3、数组pdouble c256=0;unsigned char *k,*s,*t,*get_matrix_space(int,int);/定义指向指针字符型变量s和tif(fs= fopen(hms.pgm,rb) =NULL)/打开文件hms.pgm用指针fs指向该文件printf(cant open %sLn,hms.pgm);/如果打开文件为空输出cant open %rn,hms.pgmeXit(1);/退出程序if(ft = fopen(destination.pgm,wb) =NULL)/打开文件destination.pgm用指针ft指向该文件prinpf(cant open %s

4、n,destinat)on.pgm);/如果打开文件为空输出cant open %sn,destination.gmexit(1);/退出程序if(tx = fopen(hmst.pgm,wb) =NULL)/打开文件destination.pgm用指针f4指向该文件printf(cant open %sn,hmst.pgm);/如果打开文件为空输出cant open %sn,destination.pgmexit(1);/退出程序fscanf(fs,%c%cn%d%dn%dn,&c1,&c2,&width,&height,&L);/将图像的头文件的格式类型P2或p5赋给c1c2,宽度赋值给w

5、idth,高度赋值给height,灰度最可能的最大指赋值给Ls=get_matrix_space(height,width);/分配一个长度width高度为height内存空间给指向指针st=get_matrix_space(height,width);/分配一个长度width高度为height内存空间给指向指针sk=get_matrix_space(height,width);for(i=0;iheight;i+)for(j=0;jwidth;j+)fread(&sij,sizeof(unsigned char),1,fs);/将文件fs以但个字节长度等于unsigned char元素个数初

6、值为1的方式把元素赋非S,返回元素个数/*for(i=0;iheight;i+)for(j=0;jwidth;j+)if(sij145)kij=0; else kij=255;*/*for(i=0;iheight;i+)for(j=0;jwidth;j+)/printf(%dn,kij);fwrite(&kij,sizeof(unsigned char),1,tx);*/for(i=0;iheight;i+)for(j=0;jwidth;j+)nsij+;/将灰度值相同的进行统计,并从小到大存在数组n256中for(i=0;i256;i+)pi = (double)ni/(height*wid

7、th);/将灰度值为i的个数除以图像的总像素点,也就是灰度值为i的概率密度p(i)for(i=0;i256;i+)for(j=0;j=i;j+)ci+=pj;/生成灰度值为i的概率分布c(i)max=min=s00;for(i=0;iheight;i+)for(j=0;jwidth;j+)if(maxsij)min=sij;/算出灰度值范围,最大值max和最小值minprintf(%d %dn,max,min);jun=(max+min)/2;/*二值化*/for(i=0;iheight;i+)for(j=0;jwidth;j+)if(sijjun)kij=0; else kij=255;fo

8、r(i=0;iheight;i+)for(j=0;jwidth;j+)tij=csij*(max-min)+min;/将图像中像素点的灰度值对应的概率分布函数乘以灰度值范围再加上最小灰度值,把算出来的新的灰度值赋给tfor(i=0;iheight;i+)for(j=0;jwidth;j+)mtij+;/将均衡后灰度值相同的进行统计,并从小到大存在数组m256中for(i=0;i256;i+)printf(%dn,mi);for(i=0;i256;i+)/fwrite(&mi,sizeof(int),1,tx);fprintf(ft,%c%cn%d %dn%dn,P,5,width,height,L);/输出图像的头文件fprintf(tx,%c%cn%d %dn%dn,P,5,width,height,L);/输出图像的头文件for(i=0;iheight;i+)for(j=0;jwidth;j+)fwrite(&tij,sizeof(unsigned char),1,ft);/将新生成的灰度值写到新的文件ft下for(i=0;iheight;i+)for(j=0;jwidth;j+)/printf(%dn,kij);fwrite(&kij,sizeof(unsigned char),1,tx); 原始图 直方图均衡之后二值化之后专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁