1、 计算机与通讯工程学院天津理工大学计算机与通信工程学院实验报告2010 至 2011 学年 第 二 学期实验二 图像灰度变换处理课程名称 数字图像处理学号 学生姓名 年级 2009 级专业 计算机科学与技术 教学班号 1 实验地点 主 7-215实验时间主讲教师 杨淑莹辅导教师计算机与通讯工程学院2实验(二) 实验名称 图像灰度变换处理软件环境 WindowsVC+6.0硬件环境 PC 实验目的1 实现彩色图像的灰度变换。2 将给定彩色图像中的目标物体提取,与背景分离,进行二值化。3 将给定的真彩色 24 位位图转换为 8 度位图,并保存 8 位的灰度位图。实验内容(应包括实验题目、实验要求、
2、实验任务等)1 实现彩色图像的灰度变换。要求:显示一幅 24 位图,进行灰度变换。任务: (1)在左视图中打开一幅 24bmp 位图。 (2)制作一个【图像的灰度变换】菜单,将消息映射到右视图中,在右视图中显示位图,完成彩色图像的灰度变换功能。Gray(i,j)=0.11R(i,j)+0.59G(i,j)+0.3B(i,j)2 将给定彩色图像中的目标物体提取,与背景分离,进行二值化。要求:在上面要求的基础上。将图像中的齿轮目标物体提取,与背景分离,进行二值化。任务: (1)在左视图中打开一幅 bmp 位图,包括 256 色或真彩色位图(2)制作一个【目标物体提取】菜单,将消息映射到右视图中,在
3、右视图中,完成图像中的齿轮目标物体提取,与背景分离,进行二值化。3 将给定的真彩色 24 位位图转换为 8 度位图,并保存 8 位的灰度位图。 。(选作)要求:将给定的真彩色 24 位位图转换为 8 度位图,并保存 8 位的灰度位图。 。任务: (1)在左视图中打开一幅 24bmp 位图。(2)制作一个【24 位位图转换为 8 度位图】菜单,将消息映射到右视图中,在右视图中将 24 位位图转换为 8 度位图显示,完成文件保存功能。实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)计算机与通讯工程学院31 实现彩色图像的灰度变换。(1) 取得原图的拷贝文件;(2) 取得图像的数据
4、区指针,得到像素的蓝、绿、红的 3 个分值;(3) 将蓝、绿、红 3 个值作比较,取得最大值;(4) 将最大颜色值返回给蓝、绿、红的 3 个分量;(5) 显示图像。void CDynSplitView2:OnMakegGray() /灰度调整 clearmem(); /取得原始图像的拷贝文件CDibNew1-MakegGray(); /调用灰度调整函数Invalidate(); /调用刷新函数void MakeColorDib:MakegGray() /灰度变化BYTE *p_data; /原图数据区指针int wide,height,DibWidth; /原图长、宽、字节宽p_data=th
5、is-GetData (); /取得原图的数据区指针wide=this-GetWidth (); /取得原图的数据区宽度height=this-GetHeight (); /取得原图的数据区高度DibWidth=this-GetDibWidthBytes(); /取得原图的每行字节数for(int j=0;jg)gray=r;else gray=g;if(grayZhiFangTu(midu2); /调用灰度统计处理函数/ 创建对话框CDlgZhiFangTu* dlg2;dlg2=new CDlgZhiFangTu(this);dlg2-Create(IDD_DLG_zhifangtufen
6、bu);/ 传递灰度分布密度数据给面板类for (i = 0; i m_fIntensityi = midu2i;if(CDibNew1-m_pBitmapInfoHeader-biBitCountGuDing(dlg.m_Yuzhi);Invalidate();else /24 位彩色clearmem2();CDlgGuDingFaZhi dlg;if(IDOK=dlg.DoModal()CDibNew1-GuDing(dlg.m_Yuzhi);Invalidate();void HuiDuBianHuanDib:GuDing(int YuZhi)/对图像进行固定阀值运算LPBYTE p_d
7、ata; /原图数据区指针int wide,height; /原图长、宽p_data=this-GetData (); /取得原图的数据区指针if(m_pBitmapInfoHeader-biBitCountGetWidth ();elsewide=this-GetDibWidthBytes();height=this-GetHeight ();for(int j=0;jYuZhi) /灰度值大于给定阈值,置为 255*p_data=255;else*p_data=0; /不大于置为 0p_data+;void HuiDuBianHuanDib:ZhiFangTu(float *tongji)
8、计算机与通讯工程学院6/ 循环变量int i;int j;/ 灰度计数int huidu256; int wide,height; /原图长、宽wide=this-GetWidth (); height=this-GetHeight ();/ 变量初始化memset(huidu,0,sizeof(huidu);LPBYTE temp1=new BYTEwide*height; /新图像缓冲区/拷贝原图像到缓存图像memcpy(temp1,m_pData,wide*height );/ 对各像素进行灰度统计for (j = 0; j height; j +)for (i = 0; i wide; i +)unsigned char temp = temp1wide* j + i ;/ 灰度统计计数huidutemp+;/ 计算灰度分布密度for(i=0;i256;i+)tongjii = huidui / (height * wide *1.0f);