1、多媒体信息技术课程设计报告南京工程学院课程设计报告书 课 程 名 称 多媒体信息技术 院(系、部、中心) 班 级 学 号 姓 名 起 止 日 期 指 导 教 师 目 录一课程设计目的 3二课程设计题目及要求 3三概述 3四运行结果 4五课程设计总结 5六源程序代码 6七参考文献 18一、课程设计目的本次课程设计的目的是通过课程设计,达到理论与实际应用相结合,提高学生对多媒体信息的各种处理方法的理解和编写大型程序的能力,使学生能够根据处理的信息的特征,掌握数字图像处理、数字视频编码和数字音频编码的算法设计基本方法,并培养良好的程序设计能力。二、课程设计题目及要求图像滤波去噪和滤波增强分别使用下面
2、两个均值空域滤波模板对“电路板图.bmp”进行滤波,并输出滤波结果。使用3X3中值滤波器对“带有噪声的电路板图.bmp”进行去噪滤波,并输出滤波结果。使用下图复合拉普拉斯掩模和Sobel算子对“月球.bmp”进行空域滤波增强,并输出增强结果。三、概述1、均值滤波:均值滤波时典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身)再用模板中的全体像素的平均值来代替原来像素值。2、中值滤波;中值滤波器是一种非线性平滑技术,它将每一点像素的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值;方法:通
3、过从图像中的某个采样窗口取出奇数个数据进行排序,用排序后的中值取代要处理的数据。3、复合拉普拉斯掩模:从模板形式容易看出,如果在图像中一个较暗的区域中出现了一个亮点,那么用拉普拉斯运算就会使这个亮点变得更亮,因为图像中的边缘就是那些灰度发生跳变的区域,所以拉普拉斯锐化模板在边缘检测中很有用。4、Sobel算子:主要用于作边缘检测,Sobel算子对于像素的位置影响做了加权,可以降低边缘模糊程度。四、运行结果原图:结果图:五、课程设计总结这次通过c语言编写程序对图像进行滤波,去噪滤波、空域增强,了解了图像处理的原理和过程。其中,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的
4、同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点;中值滤波对消除椒盐噪声非常有效,在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法;拉普拉斯是一种微分算子,它的应用可增强图像中灰度突变的区域,减弱灰度的缓慢变化区域Sobel算子则用于边缘检测。通过努力顺利完成了这次课程设计,学会了用c语言进行图像处理,在过程中遇到问题再解决使我成长了不少,收获了很多。六、源程序代码/BMPRW.H#ifndef BMPRW_H#define BMPRW_Htypedef struct unsigned long bfSize; unsigned short bfReserved1;
5、 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 l
6、ong 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 * pat
7、h);bool clSaveImage(char * path,ClImage * bmpImg);#endif/pretreatment.cpp#includeint 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
8、,bmpheight); getchar(); return 0;/multimedia.cpp#include#include#includeBMPRW.hClImage * 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 of
9、fset=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(&bmpIn
10、foHeader,sizeof(ClBitMapInfoHeader),1,pFile); if(bmpInfoHeader.biBitCount=8) printf(该文件有调色板,即该位图为非真彩色nn); 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; bmp
11、Img-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;iheight;i+) for(j=0;jimageData(height-1-i)*step+j=pixVal; if(offset!=0) for(j=0;jwidth=width;
12、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;iheight;i+) for(j=0;jwidth;j+) for(k=0;kimageData(height-1-i)*step+j*3+k=pixVal; if(offset!=
13、0) for(j=0;jchannels=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); bmpInfo
14、Header.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; bmpInfoHea
15、der.biClrUsed=0; bmpInfoHeader.biClrImportant=0; fwrite(&bmpInfoHeader,sizeof(ClBitMapInfoHeader),1,pFile); for(i=bmpImg-height-1;i-1;i-) for(j=0;jwidth;j+) pixVal=bmpImg-imageDatai*bmpImg-width*3+j*3; fwrite(&pixVal,sizeof(unsigned char),1,pFile); pixVal=bmpImg-imageDatai*bmpImg-width*3+j*3+1; fwri
16、te(&pixVal,sizeof(unsigned char),1,pFile); pixVal=bmpImg-imageDatai*bmpImg-width*3+j*3+2; fwrite(&pixVal,sizeof(unsigned char),1,pFile); if(offset!=0) for(j=0;jchannels=1) step=bmpImg-width; offset=step%4; if(offset!=4) step+=4-offset; bmpFileHeader.bfSize=54+256*4+bmpImg-width; bmpFileHeader.bfRese
17、rved1=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.bi
18、Compression=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); fo
19、r(i=0;iheight-1;i-1;i-) for(j=0;jwidth;j+) pixVal=bmpImg-imageDatai*bmpImg-width+j; fwrite(&pixVal,sizeof(unsigned char),1,pFile); if(offset!=0) for(j=0;joffset;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; in
20、t a500500=0; for(i=0;ih;i+) for(j=0;jimageDatai*w*3+j*3; for(i=1;ih-1;i+) for(j=1;jw-1;j+) for(k=0;kimageData(i+k)*w*3+j*3+k=(ai-1j-1+ai-1j+ai-1j+1+aij-1+aij+aij+1+ai+1j-1+ai+1j+ai+1j+1)/9; printf(模板一n); bool flag=clSaveImage(D:material1 电路图.bmp,img); if(flag) printf(save ok.n); printf(n); for(i=1;i
21、h-1;i+) for(j=2;jw-1;j+) for(k=0;kimageData(i+k)*w*3+j*3+k=(ai-1j-1+2*ai-1j+ai-1j+1+2*aij-1+4*aij+2*aij+1+ai+1j-1+2*ai+1j+ai+1j+1)/16; printf(模板二n); bool flag0=clSaveImage(D:material2 电路图.bmp,img); if(flag0) printf(save ok.n); printf(n);void Zhongzhi(ClImage * img1,int h,int w) int b9=0,a500500=0; i
22、nt i,j,k,m,n,temp; for(i=0;ih;i+) for(j=0;jimageDatai*w*3+j*3; for(i=1;ih-1;i+) for(j=1;jw-1;j+) b0=ai-1j-1; b1=ai-1j; b2=ai-1j+1; b3=aij-1; b4=aij; b5=aij+1; b6=ai+1j-1; b7=ai+1j; b8=ai+1j+1; for(m=0;m8;m+) for(n=m+1;nbn) temp=bm; bm=bn; bn=temp; for(k=0;kimageData(i+k)*w*3+j*3+k=b4; printf(中值n); bool flag1=clSaveImage(D:material3 电路板.bmp,img1); if(flag1) printf(save ok.n); printf(n);void Sobel(ClImage * img2,int h,int w) int a550470=0; int i,j,k; for(i=0;ih;i+) for(j=0;jimageDatai*w*3+j*3;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1