收藏 分销(赏)

多媒体信息技术课程设计报告.doc

上传人:w****g 文档编号:2264869 上传时间:2024-05-24 格式:DOC 页数:20 大小:1.79MB 下载积分:10 金币
下载 相关 举报
多媒体信息技术课程设计报告.doc_第1页
第1页 / 共20页
多媒体信息技术课程设计报告.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
南京工程学院 课程设计报告书 课 程 名 称 多媒体信息技术 院(系、部、中心) 班 级 学 号 姓 名 起 止 日 期 指 导 教 师 目 录 一.课程设计目的………………………………………… 3 二.课程设计题目及要求………………………………… 3 三.概述…………………………………………………… 3 四.运行结果……………………………………………… 4 五.课程设计总结………………………………………… 5 六.源程序代码…………………………………………… 6 七.参考文献……………………………………………… 18 一、课程设计目的 本次课程设计的目的是通过课程设计,达到理论与实际应用相结合,提高学生对多媒体信息的各种处理方法的理解和编写大型程序的能力,使学生能够根据处理的信息的特征,掌握数字图像处理、数字视频编码和数字音频编码的算法设计基本方法,并培养良好的程序设计能力。 二、课程设计题目及要求 图像滤波去噪和滤波增强 分别使用下面两个均值空域滤波模板对“电路板图.bmp”进行滤波,并输出滤波结果。 使用3X3中值滤波器对“带有噪声的电路板图.bmp”进行去噪滤波,并输出滤波结果。 使用下图复合拉普拉斯掩模和Sobel算子对“月球.bmp”进行空域滤波增强,并输出增强结果。 三、概述 1、均值滤波: 均值滤波时典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身)再用模板中的全体像素的平均值来代替原来像素值。 2、中值滤波; 中值滤波器是一种非线性平滑技术,它将每一点像素的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值; 方法: 通过从图像中的某个采样窗口取出奇数个数据进行排序,用排序后的中值取代要处理的数据。 3、复合拉普拉斯掩模: 从模板形式容易看出,如果在图像中一个较暗的区域中出现了一个亮点,那么用拉普拉斯运算就会使这个亮点变得更亮,因为图像中的边缘就是那些灰度发生跳变的区域,所以拉普拉斯锐化模板在边缘检测中很有用。 4、Sobel算子: 主要用于作边缘检测,Sobel算子对于像素的位置影响做了加权,可以降低边缘模糊程度。 四、运行结果 原图: 结果图: 五、课程设计总结 这次通过c语言编写程序对图像进行滤波,去噪滤波、空域增强,了解了图像处理的原理和过程。 其中,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点; 中值滤波对消除椒盐噪声非常有效,在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法; 拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域 Sobel算子则用于边缘检测。 通过努力顺利完成了这次课程设计,学会了用c语言进行图像处理,在过程中遇到问题再解决使我成长了不少,收获了很多。 六、源程序代码 //BMPRW.H #ifndef BMPRW_H #define BMPRW_H typedef struct { unsigned long bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned long bfOffBits; }ClBitMapFileHeader; typedef struct { unsigned long biSize; long biWidth; long biHeight; unsigned short biPlanes; unsigned short biBitCount; unsigned long biCompression; unsigned long biSizeImage; long biXPelsPerMeter; long biYPelsPerMeter; unsigned long biClrUsed; unsigned long biClrImportant; }ClBitMapInfoHeader; typedef struct { unsigned char rgbBlue; unsigned char rgbGreen; unsigned char rgbRed; unsigned char rgbReserved; }ClRgbQuad; typedef struct { int width; int height; int channels; unsigned char * imageData; }ClImage; ClImage *clLoadImage(char * path); bool clSaveImage(char * path,ClImage * bmpImg); #endif //pretreatment.cpp #include<stdio.h> int main() { long bmpwidth,bmpheight; FILE *fp; fp=fopen("FIVEANGL.bmp","rb"); fseek(fp,18L,SEEK_SET); fread(&bmpwidth,4,1,fp); fread(&bmpheight,4,1,fp); fclose(fp); printf("\n%s width is %ld,height is %ld","FIVEANGL.bmp",bmpwidth,bmpheight); getchar(); return 0; } //multimedia.cpp #include<stdio.h> #include<stdlib.h> #include"BMPRW.h" ClImage * clLoadImage(char * path) { ClImage * bmpImg; FILE * pFile; unsigned short fileType; ClBitMapFileHeader bmpFileHeader; ClBitMapInfoHeader bmpInfoHeader; int channels=1; int width=0; int height=0; int step=0; int offset=0; unsigned char pixVal; ClRgbQuad * quad; int i,j,k; bmpImg=(ClImage *)malloc(sizeof(ClImage)); pFile=fopen(path,"rb"); if(!pFile) { free(bmpImg); return NULL; } fread(&fileType,sizeof(unsigned short),1,pFile); if(fileType==0x4D42) { fread(&bmpFileHeader,sizeof(ClBitMapFileHeader),1,pFile); fread(&bmpInfoHeader,sizeof(ClBitMapInfoHeader),1,pFile); if(bmpInfoHeader.biBitCount==8) { printf("该文件有调色板,即该位图为非真彩色\n\n"); channels=1; width=bmpInfoHeader.biWidth; height=bmpInfoHeader.biHeight; offset=(channels*width)%4; if(offset!=0) { offset=4-offset; } bmpImg->width=width; bmpImg->height=height; bmpImg->channels=1; bmpImg->imageData=(unsigned char *)malloc(sizeof(unsigned char)*width*height); step=channels*width; quad=(ClRgbQuad *)malloc(sizeof(ClRgbQuad)*256); fread(quad,sizeof(ClRgbQuad),256,pFile); free(quad); for(i=0;i<height;i++) { for(j=0;j<width;j++) { fread(&pixVal,sizeof(unsigned char),1,pFile); bmpImg->imageData[(height-1-i)*step+j]=pixVal; } if(offset!=0) { for(j=0;j<offset;j++) { fread(&pixVal,sizeof(unsigned char),1,pFile); } } } } else if(bmpInfoHeader.biBitCount==24) { printf("该位图为真彩色\n\n"); channels=3; width=bmpInfoHeader.biWidth; height=bmpInfoHeader.biHeight; bmpImg->width=width; bmpImg->height=height; bmpImg->channels=3; bmpImg->imageData=(unsigned char *)malloc(sizeof(unsigned char)*width*3*height); step=channels*width; offset=(channels*width)%4; if(offset!=0) { offset=4-offset; } for(i=0;i<height;i++) { for(j=0;j<width;j++) { for(k=0;k<3;k++) { fread(&pixVal,sizeof(unsigned char),1,pFile); bmpImg->imageData[(height-1-i)*step+j*3+k]=pixVal; } } if(offset!=0) { for(j=0;j<offset;j++) { fread(&pixVal,sizeof(unsigned char),1,pFile); } } } } } return bmpImg; } bool clSaveImage(char * path,ClImage *bmpImg) { FILE *pFile; unsigned short fileType; ClBitMapFileHeader bmpFileHeader; ClBitMapInfoHeader bmpInfoHeader; int step; int offset; unsigned char pixVal='\0'; int i,j; ClRgbQuad * quad; pFile=fopen(path,"wb"); if(!pFile) { return false; } fileType =0x4D42; fwrite(&fileType,sizeof(unsigned short),1,pFile); if(bmpImg->channels==3) { step=bmpImg->channels*bmpImg->width; offset=step%4; if(offset!=4) { step+=4-offset; } bmpFileHeader.bfSize=bmpImg->height*step+54; bmpFileHeader.bfReserved1=0; bmpFileHeader.bfReserved2=0; bmpFileHeader.bfOffBits=54; fwrite(&bmpFileHeader,sizeof(ClBitMapFileHeader),1,pFile); bmpInfoHeader.biSize=40; bmpInfoHeader.biWidth=bmpImg->width; bmpInfoHeader.biHeight=bmpImg->height; bmpInfoHeader.biPlanes=1; bmpInfoHeader.biBitCount=24; bmpInfoHeader.biCompression=0; bmpInfoHeader.biSizeImage=bmpImg->height*step; bmpInfoHeader.biXPelsPerMeter=0; bmpInfoHeader.biYPelsPerMeter=0; bmpInfoHeader.biClrUsed=0; bmpInfoHeader.biClrImportant=0; fwrite(&bmpInfoHeader,sizeof(ClBitMapInfoHeader),1,pFile); for(i=bmpImg->height-1;i>-1;i--) { for(j=0;j<bmpImg->width;j++) { pixVal=bmpImg->imageData[i*bmpImg->width*3+j*3]; fwrite(&pixVal,sizeof(unsigned char),1,pFile); pixVal=bmpImg->imageData[i*bmpImg->width*3+j*3+1]; fwrite(&pixVal,sizeof(unsigned char),1,pFile); pixVal=bmpImg->imageData[i*bmpImg->width*3+j*3+2]; fwrite(&pixVal,sizeof(unsigned char),1,pFile); } if(offset!=0) { for(j=0;j<offset;j++) { pixVal=0; fwrite(&pixVal,sizeof(unsigned char),1,pFile); } } } } else if(bmpImg->channels==1) { step=bmpImg->width; offset=step%4; if(offset!=4) { step+=4-offset; } bmpFileHeader.bfSize=54+256*4+bmpImg->width; bmpFileHeader.bfReserved1=0; bmpFileHeader.bfReserved2=0; bmpFileHeader.bfOffBits=54+256*4; fwrite(&bmpFileHeader,sizeof(ClBitMapFileHeader),1,pFile); bmpInfoHeader.biSize=40; bmpInfoHeader.biWidth=bmpImg->width; bmpInfoHeader.biHeight=bmpImg->height; bmpInfoHeader.biPlanes=1; bmpInfoHeader.biBitCount=8; bmpInfoHeader.biCompression=0; bmpInfoHeader.biSizeImage=bmpImg->height*step; bmpInfoHeader.biXPelsPerMeter=0; bmpInfoHeader.biYPelsPerMeter=0; bmpInfoHeader.biClrUsed=256; bmpInfoHeader.biClrImportant=256; fwrite(&bmpInfoHeader,sizeof(ClBitMapInfoHeader),1,pFile); quad=(ClRgbQuad *)malloc(sizeof(ClRgbQuad)*256); for(i=0;i<256;i++) { quad[i].rgbBlue=i; quad[i].rgbGreen=i; quad[i].rgbRed=i; quad[i].rgbReserved=0; } fwrite(quad,sizeof(ClRgbQuad),256,pFile); free(quad); for(i=bmpImg->height-1;i>-1;i--) { for(j=0;j<bmpImg->width;j++) { pixVal=bmpImg->imageData[i*bmpImg->width+j]; fwrite(&pixVal,sizeof(unsigned char),1,pFile); } if(offset!=0) { for(j=0;j<offset;j++) { pixVal=0; fwrite(&pixVal,sizeof(unsigned char),1,pFile); } } } } fclose(pFile); return true; } void Junzhi(ClImage *img,int h,int w) { int i,j,k; int a[500][500]={0}; for(i=0;i<h;i++) { for(j=0;j<w;j++) { a[i][j]=img->imageData[i*w*3+j*3]; } } for(i=1;i<h-1;i++) { for(j=1;j<w-1;j++) { for(k=0;k<3;k++) { img->imageData[(i+k)*w*3+j*3+k]=(a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1])/9; } } } printf("模板一\n"); bool flag=clSaveImage("D:\\material\\1 电路图.bmp",img); if(flag) { printf("save ok...\n"); } printf("\n"); for(i=1;i<h-1;i++) { for(j=2;j<w-1;j++) { for(k=0;k<3;k++) { img->imageData[(i+k)*w*3+j*3+k]=(a[i-1][j-1]+2*a[i-1][j]+a[i-1][j+1]+2*a[i][j-1]+4*a[i][j]+2*a[i][j+1]+a[i+1][j-1]+2*a[i+1][j]+a[i+1][j+1])/16; } } } printf("模板二\n"); bool flag0=clSaveImage("D:\\material\\2 电路图.bmp",img); if(flag0) { printf("save ok...\n"); } printf("\n"); } void Zhongzhi(ClImage * img1,int h,int w) { int b[9]={0},a[500][500]={0}; int i,j,k,m,n,temp; for(i=0;i<h;i++) { for(j=0;j<w;j++) { a[i][j]=img1->imageData[i*w*3+j*3]; } } for(i=1;i<h-1;i++) { for(j=1;j<w-1;j++) { b[0]=a[i-1][j-1]; b[1]=a[i-1][j]; b[2]=a[i-1][j+1]; b[3]=a[i][j-1]; b[4]=a[i][j]; b[5]=a[i][j+1]; b[6]=a[i+1][j-1]; b[7]=a[i+1][j]; b[8]=a[i+1][j+1]; for(m=0;m<8;m++) { for(n=m+1;n<9;n++) { if(b[m]>b[n]) { temp=b[m]; b[m]=b[n]; b[n]=temp; } } } for(k=0;k<3;k++) { img1->imageData[(i+k)*w*3+j*3+k]=b[4]; } } } printf("中值\n"); bool flag1=clSaveImage("D:\\material\\3 电路板.bmp",img1); if(flag1) { printf("save ok...\n"); } printf("\n"); } void Sobel(ClImage * img2,int h,int w) { int a[550][470]={0}; int i,j,k; for(i=0;i<h;i++) { for(j=0;j<w;j++) { a[i][j]=img2->imageData[i*w*3+j*3]; } } for(i=1;i<h-1;i++) { for(j=1;j<w-1;j++) { for(k=0;k<3;k++) { img2->imageData[(i+k)*w*3+j*3+k]=9*a[i][j]-a[i-1][j-1]-a[i-1][j]-a[i-1][j+1]-a[i][j-1]-a[i][j+1]-a[i+1][j-1]-a[i+1][j]-a[i+1][j+1]; } } } bool flag4=clSaveImage("D:\\material\\4 月球.bmp",img2); if(flag4) { printf("save ok...\n"); } printf("\n"); for(i=1;i<h-1;i++) { for(j=1;j<w-1;j++) { for(k=0;k<3;k++) { img2->imageData[(i+k)*w*3+j*3+k]=abs(a[i+1][j-1]+2*a[i+1][j]+a[i+1][j+1]-a[i-1][j-1]-2*a[i-1][j]-a[i-1][j+1])+abs(a[i-1][j+1]+2*a[i][j+1]+a[i+1][j-1]-a[i-1][j-1]-2*a[i][j]-a[i+1][j-1]); } } } printf("Sobel算子\n"); bool flag5=clSaveImage("D:\\material\\5 月球.bmp",img2); if(flag5) { printf("save ok...\n"); } printf("\n"); } int main() { int w=0,h=0; printf("均值滤波\n"); ClImage *img=clLoadImage("D:\\material\\电路板图.bmp"); w=img->width; h=img->height; printf("宽%d\n高%d\n",w,h); Junzhi(img,h,w); printf("中值滤波\n"); ClImage *img1=clLoadImage("D:\\material\\带噪声的电路板图.bmp"); w=img1->width; h=img1->height; printf("宽%d\n高%d\n",w,h); Zhongzhi(img1,h,w); printf("Sobel\n"); ClImage *img2=clLoadImage("D:\\material\\月球.bmp"); w=img2->width; h=img2->height; printf("宽%d\n高%d\n",w,h); Sobel(img2,h,w); return 0; } 七、参考文献 1. 《Digital Image Processing. 2nd Ed》,R. C. Conzalez编,电子工业出版社,2002年。 2.《数字图像处理》,胡学龙编,电子工业出版社,2006年。 3.《Image Processing: The Fundamentals.》,Maria Petrou,机械工业出版社,2005年。 4.《视频处理与通信》,Yao Wang等编著,电子工业出版社,2003年。 5.《新一代视频压缩编码标准——H.264/AVC》,毕厚杰编著,人民邮电出版社,2005年。 6.《数字视频处理》,黎洪松编著,北京邮电大学出版社,2006年。 7.《数字视频处理》,全子一编著,电子工业出版社,2005年。 8.《VC++深入详解》,孙鑫编著,北京:清华大学出版社,2002年。目 录 第一章 总论 1 一、项目概况 1 二、项目提出的理由与过程 6 三、项目建设的必要性 8 四、项目的可行性 12 第二章 市场预测 15 一、市场分析 15 二、市场预测 16 三、产品市场竞争力分析 19 第三章 建设规模与产品方案 22 一、建设规模 22 二、产品方案 22 三、质量标准 22 第四章 项目建设地点 25 一、项目建设地点选择 25 二、项目建设地条件 25 第五章 技术方案、设备方案和工程方案 28 一、技术方案 28 二、产品特点 30 三、主要设备方案 32 四、工程方案 32 第六章 原材料与原料供应 35 一、原料来源及运输方式 35 二、燃料供应与运输方式 35 第七章 总图布置、运输、总体布局与公用辅助工程 37 一、总图布置 37 二、 运输 38 三、总体布局 38 四、公用辅助工程 39 第八章 节能、节水与安全措施 44 一、主要依据及标准 44 二、节能 44 三、节水 45 四、消防与安全 45 第九章 环境影响与评价 47 一、法规依据 47 二、项目建设对环境影响 48 三、环境保护措施 48 四、环境影响评价 49 第十章 项目组织管理与运行 50 一、项目建设期管理 50 二、项目运行期组织管理 52 第十一章 项目实施进度 55 第十二章 投资估算和资金筹措 56 一、投资估算 56 二、资金筹措 58 第十三章 财务评价与效益分析 61 一、项目财务评价 61 二、财务评价结论 65 三、社会效益 68 四、生态效益 68 第十四章 风险分析 70 一、主要风险分析识别 70 二、风险程度分析及防范风险的措施 70 第十五章 招标方案 72 一、招标范围 72 二、招标组织形式 72 三、招标方式 72 第十六章 结论与建议 74 一、可行性研究结论 74 二、建议 75 附 件 77 一、附表 77 二、附件 77 三、附图 77 20
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服