[毕业设计精品]简单图像处理系统的C语言实现

上传人:仙*** 文档编号:33030321 上传时间:2021-10-16 格式:DOC 页数:16 大小:370.51KB
收藏 版权申诉 举报 下载
[毕业设计精品]简单图像处理系统的C语言实现_第1页
第1页 / 共16页
[毕业设计精品]简单图像处理系统的C语言实现_第2页
第2页 / 共16页
[毕业设计精品]简单图像处理系统的C语言实现_第3页
第3页 / 共16页
资源描述:

《[毕业设计精品]简单图像处理系统的C语言实现》由会员分享,可在线阅读,更多相关《[毕业设计精品]简单图像处理系统的C语言实现(16页珍藏版)》请在装配图网上搜索。

1、光电图像处理课程设计说明书题 目图像处理系统的C语言实现系 (部) 电子与通信工程系 专业(班级) 姓 名 学 号 20080 指导教师 起止日期 10.12.2709.12.31 08级光电图像处理课程设计与仿真课题任务书系(部):电子与通信工程系 专业: 应物 指导教师: 2010-12-15课题名称运用c语言实现简单的图像处理系统设计内容及要求1、 设计内容(选题范围):首先每个同学都必须有个基本的演示系统(也就是包括简单的显示一张图片,读取图片的信息,读取一张图片。)然后根据你们的学号除以4取余数。题目一 1,显示图片的直方图,简单的线条直方图。 2,采取中值滤波 3,边缘检测(sob

2、el) 4,(提高题目)膨胀或细化题目二 1,显示图片的直方图,简单的线条直方图。 2,采取均值滤波 3,边缘检测(Roberts) 4,(提高题目)膨胀或细化题目三 1,显示图片的直方图,简单的线条直方图。 2,采取均值滤波 3,边缘检测(sobel) 4,(提高题目)膨胀或细化题目四 1,显示图片的直方图,简单的线条直方图。 2,采取中值滤波 3,边缘检测(Roberts) 4,(提高题目)膨胀或细化 2、设计要求:1、自拟课题请报指导老师登记批准;2、要求同学们能够通过自己的努力做出dos界面演示基本要求(及格),完成题目的前三个小点(中、良),完成提高(优);3、要求使用公式编辑器进行

3、公式输入;4、按照模板撰写课程设计报告。简单图像处理系统的C语言实现摘要本设计要求每个同学能编写一个简单的系统对常见的图像操作进行仿真,并设计简单的界面进行交互式操作,通过研究算法并进行分析。重点是对C语言程序设计课程中学习的知识进行形象,直观的计算机模拟与仿真实现,从而加深对数字图像处理和C语言程序设计的理解,从基本理论过渡到实际应用。通过本次课程设计的学习,掌握了数字图像处理位图的读取和显示,位图直方图的显示,一些图像变换的应用,理解各种应用的基本内容、性质与应用,特别建立图像处理设计的概念,并能建立简单处理图像系统模型,对模型求解,掌握VC+的基本方法和构成,进一步提高分析问题与实践技能

4、的能力,培养整理数据和分析结果的能力,学会用VC+编程、调试程序。加深理解与巩固理论汇编语言的知识。为以后的学习打下基础。关键词位图显示,直方图,中/均值滤波,Sobel算子的边缘检测,图像处理系统目 录1 bmp图片格式介绍及图片显示的C语言实现32 直方图显示的C语言实现43 中/均值滤波原理及C语言实现84 Sobel算子边缘检测原理及C语言实现115 图像处理系统设计126 心得体会14参考文献141 bmp图片格式介绍及图片显示的C语言实现1.1要求写出bmp图片的基本格式及文字解释。typedef struct tagBITMAPFILEHEADER /位图文件头结构 WORD b

5、fType;/位图文件的类型,必须为16793=BM DWORD bfSize;/位图文件的大小,位图文件头的总字节数,一般为14 WORD bfReserved1;/位图文件保留字,必须为0 WORD bfReserved2;/位图文件保留字,必须为0 DWORD bfOffBits;/位图数据的起始位置,以相对于位图头文件的偏移量,前三部分字节数之和BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER /位图信息头结构 DWORD biSize; / 本结构所占用字节数,40字节 LONG biWidth; / 位图的宽度,以像素为单位 L

6、ONG biHeight; / 位图的高度,以像素为单位 WORD biPlanes; / 目标设备的级别,必须为1 WORD biBitCount;/ 每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一 DWORD biCompression; / 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD biSizeImage; / 位图的大小,以字节为单位,宽乘以高 LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数 LONG biYPelsPerMeter; / 位图垂直分

7、辨率,每米像素数 DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数 DWORD biClrImportant;/ 位图显示过程中重要的颜色数BITMAPINFOHEADER; typedef struct tagRGBQUAD/位图调色板结构 BYTE rgbBlue;/ 蓝色的亮度(值范围为0-255) BYTE rgbGreen; / 绿色的亮度(值范围为0-255) BYTE rgbRed; / 红色的亮度(值范围为0-255) BYTE rgbReserved;/ 保留,必须为0RGBQUAD;1.2 C语言显示图片的关键程序(摘取重要的几行)。void ShowIm

8、age(char * filepath)/打开位图char cmd266;strcpy(cmd,start );strcat(cmd,filepath);printf(%sn,cmd);system(cmd);1.3原图截图。图1.12 直方图显示的C语言实现2.1灰度直方图是表示一幅图像灰度分布情况的统计图表。直方图的横坐标是灰度级,纵坐标是具有该灰度级的像素个数或出现这个灰度级的概率。C语言提取图片信息的关键程序(摘取重要的几行)int ReadFileHeader(char *filepath,BITMAPFILEHEADER *bmfh)/读取位图文件头FILE *fp;fp=fope

9、n(filepath,rb);fread(&bmfh-bfType,sizeof(WORD),1,fp);fread(&bmfh-bfSize,sizeof(DWORD),1,fp);fread(&bmfh-bfReserved1,sizeof(WORD),1,fp);fread(&bmfh-bfReserved2,sizeof(WORD),1,fp);fread(&bmfh-bfOffBits,sizeof(DWORD),1,fp);fclose(fp);return 0;/读取位图文件头int ReadInfoHeader(char *filepath,BITMAPINFOHEADER *

10、bmih)/读取信息头FILE *fp;fp=fopen(filepath,rb);fseek(fp,14,SEEK_SET);fread(&bmih-biSize,sizeof(DWORD),1,fp);fread(&bmih-biWidth,sizeof(LONG),1,fp);fread(&bmih-biHeight,sizeof(LONG),1,fp);fread(&bmih-biPlanes,sizeof(WORD),1,fp);fread(&bmih-biBitCount,sizeof(WORD),1,fp);fread(&bmih-biCompression,sizeof(DWO

11、RD),1,fp);fread(&bmih-biSizeImage,sizeof(DWORD),1,fp);fread(&bmih-biXPelsPerMeter,sizeof(LONG),1,fp);fread(&bmih-biYPelsPerMeter,sizeof(LONG),1,fp);fread(&bmih-biClrUsed,sizeof(DWORD),1,fp);fread(&bmih-biClrImportant,sizeof(DWORD),1,fp);fclose(fp);return 0;/读取信息头LONG GetLineBytes(int imgWidth,int bi

12、tCount)return (imgWidth*bitCount+31)/32*4;/获取一行扫描所占的字节数int ReadPixelData(char *filepath,BYTE *imgData)/读取位图数据FILE *fp;int width;int height;int bitCount;DWORD dwLineBytes;width=bmih.biWidth;height=bmih.biHeight;bitCount=bmih.biBitCount;dwLineBytes=GetLineBytes(width,bitCount);fp=fopen(filepath,rb);fs

13、eek(fp,bmfh.bfOffBits,SEEK_SET);if(bitCount!=8)&(bitCount!=24)printf(nn错误编号04:位图不是8位或24位.); return -1;fread(imgData,dwLineBytes*height*sizeof(BYTE),1,fp);return 0;/读取位图数据/*提取直方图的函数* void tqzft(BYTE *imgData) BYTE blackpoint256=0; DWORD i=0,j=0,k=0,N; DWORD dwLineBytes0; float p256,max; BITMAPFILEHEA

14、DER bmfh1; BITMAPINFOHEADER bmih1; BYTE *imgData1=NULL; BYTE *imgData2=NULL; BYTE* palette1=NULL; int x,y;/定义 dwLineBytes0=GetLineBytes(bmih.biWidth,bmih.biBitCount); N=dwLineBytes0*bmih.biHeight*sizeof(BYTE); for(j=0;j256;j+) for(i=0,k=0;i(dwLineBytes0*bmih.biHeight*sizeof(BYTE);i+) if(*(imgData+i)

15、=j) k+;pj=(float)k/N;for(i=1,max=p0;imax) max=pi; for(i=0;i256;i+) blackpointi=(BYTE)(pi/max)*255);/*前面获取涂黑的点的数量*/*下面把直方图会出来* bmfh1.bfType=16793; bmfh1.bfSize=14; bmfh1.bfReserved1=0; bmfh1.bfReserved2=0; bmfh1.bfOffBits=54; bmih1.biSize=40;bmih1.biWidth=256;bmih1.biHeight=256;bmih1.biPlanes=1;bmih1

16、.biBitCount=8;bmih1.biCompression=0;bmih1.biSizeImage=256*256; bmih1.biXPelsPerMeter=0;bmih1.biYPelsPerMeter=0;bmih1.biClrUsed=0;bmih1.biClrImportant=0;imgData1=(BYTE*)malloc(256*256*sizeof(BYTE);imgData2=imgData1;if(imgData1=0)printf(错误编号07:开辟空白图像空间失败n);elsefor(x=0;x=255;x+)for(y=0;y=255;y+)*imgDat

17、a2=255; imgData2+=1;for(x=0;x=255;x+)for(y=0;y=blackpointx;y+)*(imgData1+x+y*256)=0;save_bitmap(&bmfh1,&bmih1,imgData1,palette1); free(imgData1);imgData1=NULL;imgData2=NULL;图2.1图2.2图2.33 中/均值滤波原理及C语言实现3.1领域平均法就是对含噪声的原始图像f(x,y)的每个像素点取一个领域S,计算S中所有像素灰度级的平均值,作为领域平均处理后的图像g(x,y)的像素值。它的计算表达式是:g(x,y)=1/m f(

18、x,y)。C语言实现的关键程序(摘取重要的几行)/*平滑滤波*void phlb(BYTE *imgData)BYTE i=0,j=0,a5=0,pj=0;DWORD he=0,length,Width,Height;BYTE *imgData0=NULL;Width=bmih.biWidth;Height=bmih.biHeight;length=GetLineBytes(Width,bmih.biBitCount)*Height*sizeof(BYTE);imgData0=(BYTE*)malloc(length*Height*sizeof(BYTE);if(imgData0=NULL)p

19、rintf(错误编号08:平滑滤波失败n);if(bmih.biBitCount=8)for(j=1;jWidth-1;j+) for(i=1;iHeight-1;i+) he=0; pj=0; a0=*(imgData+j+i*Width); a1=*(imgData+j+(i+1)*Width); a2=*(imgData+j+(i-1)*Width); a3=*(imgData+(j-1)+i*Width); a4=*(imgData+(j+1)+i*Width); he=a0+a1+a2+a3+a4; pj=(BYTE)(he/5); *(imgData0+j+i*Width)=pj;

20、 else for(j=1;jWidth-1;j+) for(i=1;iHeight-1;i+) he=0; pj=0;a0=*(imgData+j*3+i*Width); a1=*(imgData+j*3+(i+1)*Width); a2=*(imgData+j*3+(i-1)*Width); a3=*(imgData+(j-1)*3+i*Width); a4=*(imgData+(j+1)*3+i*Width); he=a0+a1+a2+a3+a4; pj=(BYTE)(he/5); *(imgData0+j*3+i*Width)=pj; *(imgData0+j*3+1+i*Width)

21、=pj; *(imgData0+j*3+2+i*Width)=pj; save_bitmap(&bmfh,&bmih,imgData0,palette);free(imgData0);/释放开辟的位图数据空间imgData0=NULL;单个程序执行后截图分析:由图可以看出,图像平滑的直观效果是图像的噪声得以消除和衰减,但图像变得比以前模糊了,特别是图像的边缘和细节部分。 图3.1图3.24 Sobel算子边缘检测原理及C语言实现Sobel算子也有两个,一个是检测水平边缘的模板 ,另一个是检测水平边缘的模板 。与Prewitt算子相比,Sobel算子对于象素位置的影响作了加权,因此效果更好。so

22、bel算子的另一种形式是各向同性Sobel算子,也有两个模板组成,一个是检测水平边缘的 ,另一个是检测垂直边缘的 。各向同性Sobel算子和普通Sobel算子相比,位置加权系数更为准确,在检测不同方向的边缘时梯度的幅度一致。C语言实现的关键程序(摘取重要的几行)for(j=1;jWidth0-1;j+) for(i=1;iHeight0-1;i+) c0=*(imgData+j+i*Width0); c1=*(imgData+(j-1)+(i+1)*Width0); c2=*(imgData+(j-1)+(i-1)*Width0); c3=*(imgData+j+(i+1)*Width0);

23、c4=*(imgData+j+(i-1)*Width0); c5=*(imgData+(j+1)+(i+1)*Width0); c6=*(imgData+(j+1)+(i-1)*Width0); *(imgData3+j+i*Width0)=(BYTE)fabs(c1-c2+2*c3-2*c4+c5+c6);单个程序执行结果截图分析 :由图可见,图像经过梯度运算后只留下灰度值急剧变化的边缘处的点。图4.1图4.25 图像处理系统设计Switch 语句可以将各种功能的函数通过字母编号,当按相应键时就可以实现这个功能。C语言实现图像处理系统的关键程序(摘取重要的几行)switch(ch=getch

24、()case 1: case 1:printf(1:显示位图n); ShowImage(filepath);break; case 2: case 2:printf(2:位图信息n); PrintFileHeader(&bmfh); PrintInfoHeader(&bmih); break; case 3: case 3:PrintPixelData(imgData,bmih.biWidth,bmih.biHeight,bmih.biBitCount); break; case 4: case 4:printf(4:取直方图n); tqzft(imgData); break; case 5:

25、 case 5:printf(5:均值滤波n); phlb(imgData); break; case 6: case 6:printf(6:边缘检测n); byjc(imgData); break; case 7: case 7:printf(7:更换位图n); free(imgData);/释放开辟的位图数据空间 imgData=NULL; free(palette); palette=NULL; inputfilepath(filepath); READALL(filepath);/将位图数据读入内存 break;case 0:case 0:printf(0:退出处理n); goto e

26、nd;while(1);end:系统执行结果dos界面截图分析:通过switch()多分枝语句实现了,将显示位图,位图信息,位图数据,取直方图,均值滤波,边缘检测,更换位图等功能集合于一体,通过不同按键来实现这些功能。6 心得体会在这次数字图像处理的课程设计过程中,首先加深了我对于数字图像处理这门课程的认识,通过对相关知识的进一步了解和掌握,清楚的认识到这门课程在实际应用的广泛性。这次课程设计不仅将光电图像处理课程的知识进行了实际运用,还对C语言的应用起了促进作用,通过C编程的过程之中,进一步掌握了C的使用。让我感觉到使用知识和学习知识都是非常快乐的事。另外,我希望通过对C语言编程进步,来促进光电图像处理的应用,使我的程序能够是想更多的光电图像处理的功能,同时也是程序的界面更接近于我们所希望的形式。也明白了这个软件作为许多应用方向工具的强大之处,通过对一些小错误的改造还认识到了以往自己没有注意到的一些小的细节问题。最后,感谢老师在这次实习中给予的指导和帮助。参考文献数字图象处理张宏C语言程序设计教程杨路明14

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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