图象处理和分析实验说明书2.doc

上传人:枫** 文档编号:544107449 上传时间:2023-01-09 格式:DOC 页数:8 大小:62.51KB
返回 下载 相关 举报
图象处理和分析实验说明书2.doc_第1页
第1页 / 共8页
图象处理和分析实验说明书2.doc_第2页
第2页 / 共8页
图象处理和分析实验说明书2.doc_第3页
第3页 / 共8页
图象处理和分析实验说明书2.doc_第4页
第4页 / 共8页
图象处理和分析实验说明书2.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《图象处理和分析实验说明书2.doc》由会员分享,可在线阅读,更多相关《图象处理和分析实验说明书2.doc(8页珍藏版)》请在金锄头文库上搜索。

1、课程实验2 一、实验目的 掌握在计算机上进行直方图均衡化以及线性增强的方法。二、实验环境 12人一台pc机,Visual C+6.0编程环境。三、实验内容1 编写直方图均衡化、线性增强的C语言程序及相应的显示程序。2 对指定图象进行直方图均衡化和线性增强,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。四、实验步骤1 参照实验1的实验步骤13,不同之处是将工程名改为HistogramAverage。2 打开HistogramAverage.cpp文件,在主函数main之前添加如下代码:BITMAPFILEHEADER bmfHeader; /位图文件头BITMAPINFOHEADER

2、bmiHeader; /位图信息头RGBQUAD *bmiColor; /调色板指针unsigned char MyImage10241024; /为输入的二维图像的颜色数据分配一个二维数组unsigned char OutImage10241024; /为处理后的二维图像的颜色数据分配一个二维数组3 紧接以上代码,编写直方图均衡化的核心算法函数如下:void HistAvrg(unsigned char InImage10241024, unsigned char OutImage10241024, long Row, long Col)/ 循环变量longi, j;/ 临时变量LONGlT

3、emp;/ 直方图统计数组LONGlCount256;/ 灰度映射表unsigned charbMap256;/ 重置计数为0for (i = 0; i 256; i +)/ 清零lCounti = 0;/ 计算各个灰度值的计数for(i=0;iRow;i+)for(j=0;jCol;j+)lCountInImageij+;/ 计算灰度映射表for (i = 0; i 256; i+)/ 初始为0lTemp = 0;for (j = 0; j = i ; j+)lTemp += lCountj;/ 计算对应的新灰度值bMapi = (unsigned char) (lTemp * 255 /

4、Row / Col);for(i = 0; i Row; i+)for(j = 0; j Col; j+)OutImageij = bMapInImageij; / 计算新的灰度值4 将主函数写为如下形式:void main(int argc, char* argv)if(argc2) printf(输入命令格式: HistogramAverage.exe *.bmpn); return; FILE *fp;int Palette_Num;int Height, Width, Width_4;int i, j;DWORD Color_Value;fp=fopen(argv1, rb); /打开

5、*.bmp文件,获取文件指针 fread(&bmfHeader, sizeof(bmfHeader), 1, fp); /从文件中读位图文件头数据到bmfHeader变量fread(&bmiHeader, sizeof(bmiHeader), 1, fp); /从文件中读位图信息头数据到bmiHeader变量/ 判断是否是DIB对象,检查头两个字节是否是BMif (bmfHeader.bfType != 0x4D42)printf(这不是一个位图文件n);return;/判断位图的颜色是否是256色if(bmiHeader.biBitCount!=8)printf(本程序只能显示256色灰度图

6、n);return;Height = bmiHeader.biHeight; /从信息头中读出图像高度Width = bmiHeader.biWidth; /从信息头中读出图像宽度 Width_4 = (Width+3)/4*4; /取一个大于等于Width,并且最接近Width的4的整数倍的数值/获取调色板的成员数目,也就是位图所用到的颜色个数if(bmiHeader.biClrUsed=0) Palette_Num = 1bmiHeader.biBitCount;elsePalette_Num = bmiHeader.biClrUsed;bmiColor = (RGBQUAD *)mall

7、oc(Palette_Num * sizeof(RGBQUAD); /为调色板指针指向的地址分配一块内存空间fread(bmiColor, sizeof(RGBQUAD), Palette_Num, fp); /从文件中读位图的调色板数据到bmiColor指针指向的缓冲区 fseek(fp, bmfHeader.bfOffBits, 0); /令文件指针指向位图有效数据的起始位置/将位图有效数据输入导入MyImage二维数组中for(i=0; iHeight; i+)fread(MyImageHeight-1-i, sizeof(unsigned char), Width_4, fp);fcl

8、ose(fp); /关闭位图文件for(i=0; iHeight; i+)for(j=0; jWidth; j+)MyImageij = bmiColorMyImageij.rgbRed; /根据颜色索引号从调色板中查找真正的颜色值,赋给MyImage数组的元素 free(bmiColor);HistAvrg(MyImage, OutImage, Height, Width); /直方图均衡化处理 HDC hMyDc=GetDC(NULL); /获取显示屏的指针/将MyImage和OutImage二维数组所存储的图像数据显示在屏幕上for(i=0; iHeight; i+)for(j=0; j

9、Width; j+) Color_Value = MyImageij;Color_Value = Color_Value*65536 + Color_Value*256 +Color_Value; SetPixel(hMyDc, j, i, Color_Value);Color_Value = OutImageij;Color_Value = Color_Value*65536 + Color_Value*256 +Color_Value; SetPixel(hMyDc, j+Width+20, i, Color_Value);return;5 依次点击菜单“Build”下面的“Compile

10、” 和“Rebuild All”菜单项,在Debug文件夹中生成可执行程序HistogramAverage.exe。将该文件复制到E:盘根目录下,并将实验图片也全部复制到根目录下。在dos命令提示符界面中,进入到E:盘根目录下,然后输入命令:“HistogramAverage camera.bmp”,回车确定。6 将上面的命令中的文件名换成其他的位图文件名,分别对这些图片进行直方图均衡化实验。7 线性增强处理程序的编写与直方图均衡化程序类似,学生自行编写,得出实验结果并撰写相应的实验报告。BITMAPFILEHEADER bmfHeader; /位图文件头BITMAPINFOHEADER bm

11、iHeader; /位图信息头RGBQUAD *bmiColor; /调色板指针unsigned char MyImage10241024; /为输入的二维图像的颜色数据分配一个二维数组unsigned char OutImage10241024; /为处理后的二维图像的颜色数据分配一个二维数组/线性增强函数void LinearEnhancement(unsigned char InImage10241024, unsigned char OutImage10241024, long Row, long Col, float k, float b)unsigned char a256;int

12、 n;int i, j;float NewValue;/灰度值映射for(n=0; n256; n+)NewValue = k * n + b;if(NewValue255)an = 255;elsean = (unsigned char)NewValue;/对原图像中的每个像素,用映射后的新灰度值替换原始灰度值for(i=0;iRow;i+)for(j=0;jCol;j+)OutImageij = aInImageij;void main(int argc, char* argv)if(argc2) printf(输入命令格式: LinearEnhance.exe *.bmpn); return; float k, b; /线性映射函数的斜率和截距 printf(请输入线性映射函数的斜率n);scanf(%f,&k);printf(请输入线性映射函数的截距n);scanf(%f,&b);FILE *fp;int Palette_Num;int Height, Width, Width_4;int i, j;DWORD Color_Value;fp=fopen(argv1, rb); /打开*.bmp文件,获取文件指针 fread(&bmfHeader, sizeof(bmfHeader), 1, fp); /从文件中读位图文件头数据到bmfHeader变量fread(&bmiH

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号