预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

XXXXX大学 数据图像处理 实验报告 (2013年春季学期) 课程名称:数字图像处理 题目:图像直方图修正实验 专业班级:XXXX 学生姓名:XXX 学号: 指导教师: 成绩: 2013年4月25日 实验目的 1掌握灰度直方图的概念及其计算方法; 2熟练掌握直方图均衡化和直方图规定化的计算过程; 实验原理 图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行联系。 直方图是多种空间城处理技术的基础。直方图操作能有效地用于图像增强。除了提供有用的图像统计资料外,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。直方图在软件中易于计算,也适用于商用硬件设备,因此,它们成为了实时图像处理的一个流行工具。 直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。直方图均衡化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。灰度直方图是图像预处理中涉及最广泛的基本概念之一。 图像的直方图事实上就是图像的亮度分布的概率密度函数,是一幅图像的所有象素集合的最基本的统计规律。直方图反映了图像的明暗分布规律,可以通过图像变换进行直方图调整,获得较好的视觉效果。 直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。 处理后的图像直方图分布更均匀了,图像在每个灰度级上都有像素点。从处理前后的图像可以看出,许多在原始图像中看不清楚的细节在直方图均衡化处理后所得到的图像中都变得十分清晰。 实验内容 本实验基于VC++6.0的SDK创建的工程,编写程序实现以下功能: 用直接灰度变换方法进行对比度增强,设计分段线性变换函数,做增强处理; 编写程序进行图像的直方图统计和修正; 实验过程 用直接灰度变换方法进行对比度增强,设计分段线性变换函数,做增强处理; 在创建的工程资源的菜单中创建相应的“直方图均衡”菜单选项如图 图1 建立相应的类向导 voidCMyDIPView::OnMenuitem32778() { //灰度均衡 //获取文档 CMyDIPDoc*pDoc=GetDocument(); //指向DIB的指针 LPSTR lpDIB; //指向DIB象素指针 LPSTRlpDIBBits; //锁定DIB lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB()); //找到DIB图像象素起始位置 lpDIBBits=::FindDIBBits(lpDIB); //判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的直方图均衡,其它的可以类推) if(::DIBNumColors(lpDIB)!=256) { //提示用户 MessageBox("目前只支持256色位图的直方图均衡!","系统提示", MB_ICONINFORMATION|MB_OK); //解除锁定 ::GlobalUnlock((HGLOBAL)pDoc->GetHDIB()); //返回 return; } //更改光标形状 BeginWaitCursor(); //调用InteEqualize()函数进行直方图均衡 InteEqualize(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB)); //设置脏标记 pDoc->SetModifiedFlag(TRUE); //更新视图 pDoc->UpdateAllViews(NULL); //解除锁定 ::GlobalUnlock((HGLOBAL)pDoc->GetHDIB()); //恢复光标 EndWaitCursor(); } 在实验一的基础上打开一副位图 图2 点击菜单中的直方图均衡化 图3 代码如下: voidCMyDIPView::OnDraw(CDC*pDC) { CMyDIPDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); if(pDoc->m_hDIB==NULL) return; //TODO:adddrawcodefornativedatahere inti,j; unsignedchar*lpSrc; LPSTRlpDIB=(LPS