欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    计算机图像处理实验.docx

    • 资源ID:12930532       资源大小:22.17KB        全文页数:25页
    • 资源格式: DOCX        下载积分:6金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要6金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机图像处理实验.docx

    1、计算机图像处理实验位图文件信息的提取和二值化处理实验步骤: 1.拷贝MinGW文件夹至C:(路径为C:MinGW)2.编辑setc.bat文件,然后运行此批处理以设置路径。3.编辑hdr.h 和hdr.c文件4.编辑bmphdr.c文件,然后在当前文件路径下,使用DOS命令:gcc -c hdr.c /编译,生成hdr.o目标文件gcc -c bmphdr.c /编译,生成bmphdr.o目标文件gcc -o bmphdr.exe hdr.o bmphdr.o /链接,生成bmphdr.exe执行文件使用bmphdr.exe来提取某一个bmp文件的头信息,例如: bmphdr test.bmp

    2、5.编辑 ez.c文件(用于图像的二值化处理),然后gcc -c ez.c /编译,生成ez.o目标文件gcc -o ez.exe hdr.o ez.o /链接,生成ez.exe执行文件使用 ez.exe文件来对某一个bmp文件进行二值化处理。例如:ez test.bmp result.bmp 108 (对test.bmp文件 进行二值化处理,阈值为108,处理的结果为result.bmp文件)hdr.h文件内容:#ifndef _HDR_H_#define _HDR_H_struct bmphdr char signature2; int size; short reserved2; int

    3、 offset; int hdr_size; int width; int height; short nr_planes; short bits_per_pixel; int compress_type; int data_size; int resol_hori; int resol_vert; int nr_colors; int important_color; char info1024;struct bmphdr *get_header(char filename);#endifhdr.c文件内容:#include #include #include hdr.hstruct bmp

    4、hdr *get_header(char filename) FILE *fp; struct bmphdr *hdr; fp = fopen(filename, rb); if (!fp) printf(File open error or such file does not exist!n); return NULL; hdr = (struct bmphdr *)malloc(sizeof(struct bmphdr); fread(hdr-signature, 2, 1, fp); if (hdr-signature0 != B | hdr-signature1 != M) prin

    5、tf(Not a bmp file!n); return NULL; fread(&hdr-size, 4, 1, fp); fread(hdr-reserved, 4, 1, fp); fread(&hdr-offset, 4, 1, fp); fread(&hdr-hdr_size, 4, 1, fp); fread(&hdr-width, 4, 1, fp); fread(&hdr-height, 4, 1, fp); fread(&hdr-nr_planes, 2, 1, fp); fread(&hdr-bits_per_pixel, 2, 1, fp); fread(&hdr-com

    6、press_type, 4, 1, fp); fread(&hdr-data_size, 4, 1, fp); fread(&hdr-resol_hori, 4, 1, fp); fread(&hdr-resol_vert, 4, 1, fp); fread(&hdr-nr_colors, 4, 1, fp); fread(&hdr-important_color, 4, 1, fp); if (hdr-offset 54) fread(&hdr-info, 1024, 1, fp); fclose(fp); return hdr; bmphdr.c文件内容:#include struct b

    7、mphdr char signature2; int size; short reserved2; int offset; int hdr_size; int width; int height; short nr_planes; short bits_per_pixel; int compress_type; int data_size; int resol_hori; int resol_vert; int nr_colors; int important_color; header;int main(int argc, char *argv) FILE *fp; if (argc !=

    8、2) printf(Usage: %s n, argv0); exit(1); fp = fopen(argv1, r); if (!fp) printf(File open error or such file does not exist!n); exit(1); fread(header.signature, 2, 1, fp); if (header.signature0 != B | header.signature1 != M) printf(Not a bmp file!n); exit(1); fread(&header.size, 4, 1, fp); fread(heade

    9、r.reserved, 4, 1, fp); fread(&header.offset, 4, 1, fp); fread(&header.hdr_size, 4, 1, fp); fread(&header.width, 4, 1, fp); fread(&header.height, 4, 1, fp); fread(&header.nr_planes, 2, 1, fp); fread(&header.bits_per_pixel, 2, 1, fp); fread(&press_type, 4, 1, fp); fread(&header.data_size, 4, 1, fp); f

    10、read(&header.resol_hori, 4, 1, fp); fread(&header.resol_vert, 4, 1, fp); fread(&header.nr_colors, 4, 1, fp); fread(&header.important_color, 4, 1, fp); fclose(fp); printf(signature %c%cn, header.signature0, header.signature1); printf(size %dn, header.size); printf(offset %dn, header.offset); printf(h

    11、dr_size %dn, header.hdr_size); printf(width %dn, header.width); printf(height %dn, header.height); printf(nr_planes %dn, header.nr_planes); printf(bits_per_pixel %dn, header.bits_per_pixel); printf(compress_type %dn, press_type); printf(data_size %dn, header.data_size); printf(resol_hori %dn, header

    12、.resol_hori); printf(resol_vert %dn, header.resol_vert); printf(nr_colors %dn, header.nr_colors); printf(important_color %dn, header.important_color); printf(n); return 0; 二值化程序 ez.c 文件内容:#include #include #include #include hdr.hstruct bmphdr *hdr;unsigned char *bitmap, *to;char buf2048;int main(int

    13、 argc, char *argv) int i, j, k, nr_pixels; FILE *fp, *fpnew; unsigned g; if (argc != 4) printf(Usage: %s n, argv0); exit(1); hdr = get_header(argv1); if (!hdr) exit(1); fp = fopen(argv1, rb); if (!fp) printf(File open error!n); exit(1); fseek(fp, hdr-offset, SEEK_SET); nr_pixels = hdr-width * hdr-he

    14、ight; bitmap = malloc(nr_pixels); fread(bitmap, nr_pixels, 1, fp); fclose(fp); k = atoi(argv3); to = malloc(nr_pixels); memset(to, 0, nr_pixels); for (i = 0; i (unsigned char)k ? 255 : 0; fpnew = fopen(argv2, wb+); if (!fpnew) printf(File create error!n); exit(1); fwrite(hdr-signature, 2, 1, fpnew);

    15、 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_per_pixel, 2, 1, fpnew); fwrite(&hdr-comp

    16、ress_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); fwrite(to, nr_pixe

    17、ls, 1, fpnew); fclose(fpnew); free(hdr); free(bitmap); return 0;直方图均衡化直方图均衡化实质上是减少图象的灰度级以换取对比度的加大例如:假设原图的灰度分布级为126(最大为256,也就是从0到255的级上的灰度都有或多或少的出现),经过直方图均衡化后,灰度分布级别将会小于126。编程的时候请按照直方图均衡化公式进行。#include #include #include #include hdr.hstruct bmphdr *hdr;/定义用于直方图变量unsigned char *bitmap, new_color256;/定义

    18、计算灰度分布,灰度累计分布的数组int count256, acum256;int main(int argc,char *argv) /定义整数 i, j 用于函数循环时的,nr_pixels为图像中像素的个数 int i, j, nr_pixels; /定义两个文件指针分别用于提取原图像的数据和生成直方图均衡化后的图像 FILE *fp, *fpnew; /定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处内容可以不要,在DOS下执行命令的时候再临时输入也可,为了方便演示,我这里直接把函数的参数确定了。 argc=3; argv1=test.bmp; argv2=testzf.

    19、bmp; /参数输入出错显示 if (argc!=3) printf(please input the name of input and out bitmap filesn); exit(1); / 获取位图文件相关信息 hdr=get_header(argv1); if (!hdr) exit(1); /以二进制可读方式打开输入位图文件 fp = fopen(argv1, rb); if (!fp) printf(File open error!n); exit(1); / 文件指针指向数据区域 fseek(fp, hdr-offset, SEEK_SET); /计算位图像素的个数 nr_

    20、pixels=hdr-width * hdr-height; bitmap=malloc(nr_pixels); /读取位图数据到bitmap中 fread(bitmap, nr_pixels, 1, fp); fclose(fp); memset(count, 0, sizeof(count); /计算每个灰度级上像素的个数 结果存入count数组中 for(i=0;i=nr_pixels;i+) for(j=0;j=256;j+) if(bitmapi=j) countj+; memcpy(acum, count, sizeof(acum); /计算灰度的累计分布 for (i = 1;

    21、i 256; i+) acumi += acumi-1; /灰度直方图的均衡化(核心程序部分,请仔细分析)为了方便大家编程实现,这里直接给出了源代码,本实验最核心的部分就在这里 for (i = 0; i 256; i+) new_colori=acumi*255/acum255; /对所有的像素灰度值按照均衡化得到的灰度对应规则进行转换,结果存入bitmap中 for (i = 0; i signature, 2, 1, fpnew); fwrite(&hdr-size, 4, 1, fpnew); fwrite(hdr-reserved, 4, 1, fpnew); fwrite(&hdr

    22、-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); fwrite(&hdr-resol

    23、_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(hd

    24、r); free(bitmap); return 0;邻域平均法(box模板)和中值滤波处理设计程序,分别用邻域平均法,其模板为:和中值滤波法对testnoise图像进行去噪处理(中值滤波的模板的大小也设为33)。得出实验结果图像后,比较这两种方法去噪的效果好坏,并分析具体原因。完成上述工作后,使用程序进行验证分析:使用邻域平均法时,33和55模板大小对图像进行处理的效果有何差别?并分析原因。邻域平均法(3*3)/*-利用第一次实验课提供的 dhc.h 和 dhc.c文件以获取位图的高 宽 以及从文件头到实际的位图数据的偏移字节数,从而实现对位图实际数据的操作。-*/#include #inc

    25、lude #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 *fp, *fpnew; /定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处内容可以不要,在

    26、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(testnoise.bmp); if (!hdr) exit(1); /以二进制可读方式打开输入位图文件

    27、 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 = 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);


    注意事项

    本文(计算机图像处理实验.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开