数字图像处理实验报告.docx

上传人:小飞机 文档编号:3558862 上传时间:2023-03-13 格式:DOCX 页数:8 大小:38.83KB
返回 下载 相关 举报
数字图像处理实验报告.docx_第1页
第1页 / 共8页
数字图像处理实验报告.docx_第2页
第2页 / 共8页
数字图像处理实验报告.docx_第3页
第3页 / 共8页
数字图像处理实验报告.docx_第4页
第4页 / 共8页
数字图像处理实验报告.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告.docx(8页珍藏版)》请在三一办公上搜索。

1、数字图像处理实验报告数字图像处理实验报告 班级: 姓名: 学号: 日期: 邻域平均法和中值滤波处理 一、实验目的 图像变换是数字图像处理中的一种综合变换,如直方图变换、几何变换等。通过本实验,使得学生掌握两种变换的程序实现方法。 二、实验任务 请设计程序,分别用邻域平均法,其模板为:和中值滤波法对testnoise图像进行去噪处理。 三、实验环境 本实验在Windows平台上进行,对内存及cpu主频无特别要求,使用VC或者MINGW编译器均可。 四、设计思路 介绍代码的框架结构、所用的数据结构、各个类的介绍、各方法间的关系写。在此不进行赘述。 五、具体实现 实现设计思路中定义的所有的数据类型,

2、对每个操作给出实际算法。对主程序和其他模块也都需要写出实际算法。 代码: (3*3) #include #include #include #include hdr.h /*-定义结构指针-*/ struct bmphdr *hdr; /定义用于直方图变量 unsigned char *bitmap,*count,*new_color; /*-main函数编-*/ int main /定义整数 i,j 用于函数循环时的,nr_pixels为图像中像素的个数 int i, j ,nr_pixels,nr_w,nr_h; /定义两个文件指针分别用于提取原图的数据和生成直方图均衡化后的图像 FILE

3、 *fp, *fpnew; /定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处内容可以不要,在DOS下执行命令的时候再临时输入也可,为了方便演示,我这里直接把函数的参数确定了。/ argc=3; / argv1=test.bmp; / argv2=testzf.bmp; /参数输入出错显示 /* if (argc != 3) printf(please input the name of input and out bitmap filesn); exit(1); */ / 获取位图文件相关信息/ hdr = get_header(argv1); hdr = get_header

4、(testnoise.bmp); if (!hdr) exit(1); /以二进制可读方式打开输入位图文件 fp = fopen(testnoise.bmp, rb); if (!fp) printf(File open error!n); exit(1); / 文件指针指向数据区域 fseek(fp, hdr-offset, SEEK_SET); /计算位图像素的个数 nr_pixels = hdr-width * hdr-height; nr_w = hdr-width; nr_h = hdr-height; bitmap = malloc(nr_pixels); new_color =

5、malloc(nr_pixels); count = malloc(nr_w+2)*(+nr_h+2); /读取位图数据到bitmap中 fread(bitmap, nr_pixels, 1, fp); fclose(fp); /因为图像边缘无法使用邻域平均,所以根据邻近颜色填补图像的周围一圈,存入count数组中 /中心图像存入count for(i=nr_w+3;i(nr_w+2)*(+nr_h+2)-nr_w-3;i+) j=i/(nr_w+2); if(i%(nr_w+2)!=0&(i+1)%(nr_w+2)!=0) counti=bitmapi-nr_w-1-2*j; /填补第一排

6、for(i=1;inr_w+1;i+) counti=bitmapi-1; /填补最后一排 for(i=1;inr_w+1;i+) count(nr_w+2)*(nr_h+1)+i=bitmapnr_w*(nr_h-1)+i-1; /填补左边一排 for(i=0;inr_h+3;i+) counti*(nr_w+2)=counti*(nr_w+2)+1; /填补右边一排 for(i=0;inr_h+3;i+) count(i+1)*(nr_w+2)-1=count(i+1)*(nr_w+2)-2; /邻域平均3*3 for(j=nr_w+3,i=0;j(nr_w+2)*(+nr_h+2)-nr

7、_w-3;j+) if(j%(nr_w+2)!=0&(j+1)%(nr_w+2)!=0) new_colori=(countj+countj-1+countj+1+countj-nr_w-2+countj-1-nr_w-2+countj+1-nr_w-2+countj+nr_w+2+countj-1+nr_w+2+ countj+1+nr_w+2)/9,i+; /结果存入bitmap中 for (i = 0; i signature, 2, 1, fpnew); fwrite(&hdr-size, 4, 1, fpnew); fwrite(hdr-reserved, 4, 1, fpnew);

8、 fwrite(&hdr-offset, 4, 1, fpnew); fwrite(&hdr-hdr_size, 4, 1, fpnew); fwrite(&hdr-width, 4, 1, fpnew); fwrite(&hdr-height, 4, 1, fpnew); fwrite(&hdr-nr_planes, 2, 1, fpnew); fwrite(&hdr-bits_per_pixel, 2, 1, fpnew); fwrite(&hdr-compress_type, 4, 1, fpnew); fwrite(&hdr-data_size, 4, 1, fpnew); fwrit

9、e(&hdr-resol_hori, 4, 1, fpnew); fwrite(&hdr-resol_vert, 4, 1, fpnew); fwrite(&hdr-nr_colors, 4, 1, fpnew); fwrite(&hdr-important_color, 4, 1, fpnew); if (hdr-offset 54) fwrite(hdr-info, (hdr-offset - 54), 1, fpnew); /直方图均衡化的数据(bitmap)赋值fwrite(bitmap, nr_pixels, 1, fpnew); /关闭 fclose(fpnew); /释放内存 f

10、ree(hdr); free(bitmap); free(new_color); free(count); return 0; #include #include #include #include hdr.h /*-定义结构指针-*/ struct bmphdr *hdr; /定义用于直方图变量 unsigned char *bitmap,*count,*new_color; /*-main函数编写-*/ int main /定义整数 i, j 用于函数循环时的,nr_pixels为图像中像素的个数 int i, j, m, n, nr_pixels,nr_w,nr_h,temp,t9; /

11、定义两个文件指针分别用于提取原图像的数据和生成直方图均衡化后的图像 FILE *fp, *fpnew; /定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处内容可以不要,在DOS下执行命令的时候再临时输入也可. / argc=3; / argv1=test.bmp; / argv2=testzf.bmp; /参数输入出错显示 /* if (argc != 3) printf(please input the name of input and out bitmap filesn); exit(1); */ / 获取位图文件相关信息/ hdr = get_header(argv1);

12、 hdr = get_header(testnoise.bmp); if (!hdr) exit(1); /以二进制可读方式打开输入位图文件 fp = fopen(test.bmp, rb); if (!fp) printf(File open error!n); exit(1); / 文件指针指向数据区域 fseek(fp, hdr-offset, SEEK_SET); /计算位图像素的个数 nr_pixels = hdr-width * hdr-height; nr_w = hdr-width; nr_h = hdr-height; bitmap = malloc(nr_pixels);

13、new_color = malloc(nr_pixels); count = malloc(nr_w+2)*(+nr_h+2); /读取位图数据到bitmap中 fread(bitmap, nr_pixels, 1, fp); fclose(fp); /因为图像边缘无法使用邻域平均,所以根据邻近颜色填补图像的周围一圈,存入count数组中 /中心图像存入count for(i=nr_w+3;i(nr_w+2)*(+nr_h+2)-nr_w-3;i+) j=i/(nr_w+2); if(i%(nr_w+2)!=0&(i+1)%(nr_w+2)!=0) counti=bitmapi-nr_w-1-

14、2*j; /填补第一排 for(i=1;inr_w+1;i+) counti=bitmapi-1; /填补最后一排 for(i=1;inr_w+1;i+) count(nr_w+2)*(nr_h+1)+i=bitmapnr_w*(nr_h-1)+i-1; /填补左边一排 for(i=0;inr_h+3;i+) counti*(nr_w+2)=counti*(nr_w+2)+1; /填补右边一排 for(i=0;inr_h+3;i+) count(i+1)*(nr_w+2)-1=count(i+1)*(nr_w+2)-2; /中值平均3*3 for(j=nr_w+3,i=0;j(nr_w+2)*

15、(+nr_h+2)-nr_w-3;j+) if(j%(nr_w+2)!=0&(j+1)%(nr_w+2)!=0) t0=countj; t1=countj-1; t2=countj+1; t3=countj-nr_w-2; t4=countj-1-nr_w-2; t5=countj+1-nr_w-2; t6=countj+nr_w+2; t7=countj-1+nr_w+2; t8=countj+1+nr_w+2; for(m=0;m9;m+) for(n=0;ntn+1) temp=tn; tn=tn+1; tn+1=temp; new_colori=t4; i+; /结果存入bitmap中

16、 for (i = 0; i signature, 2, 1, fpnew); fwrite(&hdr-size, 4, 1, fpnew); fwrite(hdr-reserved, 4, 1, fpnew); fwrite(&hdr-offset, 4, 1, fpnew); fwrite(&hdr-hdr_size, 4, 1, fpnew); fwrite(&hdr-width, 4, 1, fpnew); fwrite(&hdr-height, 4, 1, fpnew); fwrite(&hdr-nr_planes, 2, 1, fpnew); fwrite(&hdr-bits_pe

17、r_pixel, 2, 1, fpnew); fwrite(&hdr-compress_type, 4, 1, fpnew); fwrite(&hdr-data_size, 4, 1, fpnew); fwrite(&hdr-resol_hori, 4, 1, fpnew); fwrite(&hdr-resol_vert, 4, 1, fpnew); fwrite(&hdr-nr_colors, 4, 1, fpnew); fwrite(&hdr-important_color, 4, 1, fpnew); if (hdr-offset 54) fwrite(hdr-info, (hdr-offset - 54), 1, fpnew); /直方图均衡化的数据(bitmap)赋值 fwrite(bitmap, nr_pixels, 1, fpnew); /关闭 fclose(fpnew); /释放内存 free(hdr); free(bitmap); free(new_color); free(count); return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号