直方图均衡化Word下载.docx
《直方图均衡化Word下载.docx》由会员分享,可在线阅读,更多相关《直方图均衡化Word下载.docx(9页珍藏版)》请在冰点文库上搜索。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。
这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。
这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。
设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。
在灰度直方图均衡化处理中对图像的映射函数可定义为:
g=EQ(f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
(1)EQ(f)在0?
f?
L-1范围内是一个单值单增函数。
这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于
1
0?
L-1有0?
g?
L-1,这个条件保证了变换前后灰度值动态范围的一致性。
累积分布函数(cumulativedistributionfunction,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。
此时的直方图均衡化映射函数为:
gk=EQ(fk)=(ni/n)=pf(fi),(k=0,1,2,……,L-1)上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。
在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。
在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。
1.2直方图计算
图像的灰度统计直方图是一个1—D的离散函数:
/np()=k=0,1,…,L-1
(1)snkk
上式中为图形f(x,y)的第k级灰度值,是f(x,y)中具有灰度值的像素的个snskkk数,n是图像像素总数。
因为p()给出了对出现概率的一个估计,所以直方sk
图提供了原图像的灰度值分布情况,也可以说是给出了一幅图像所有灰度值的整体描述。
1.3直方图均衡化
直方图均衡化的基本思想是把原始图像的直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围从而达到增强图像整体对比度的效果。
将
(1)表示为:
/np()=0?
?
1ssnkkk
k=0,1,…,L-1
(2)
这里p()代表原始图像第k个灰度级的出现概率。
以为自变量,以snkkp()为函数得到的曲线就是图像的直方图。
sk
可以看到,增强函数需要满足两个条件:
1.EH(s)在0?
L-1范围内是一个单值单增函数;
2
2.对0?
EH(s)?
L-1sk
可以证明累积分布函数(CDF)满足上述两个条件并能将s的分布转换为t的均匀分布。
事实上s的CDF就是原始图的累积直方图,在这种情况下有:
kkni0?
1,EH(),,ps,,,,tssskkki,,i0i0n
k=0,1,…,L-1(3)由上式可见,根据原图像直方图可以直接算出直方图均衡化后各像素的灰度值。
当然实际中还要对取整以满足数字图像的要求。
tk
2实现步骤
项目工程实现步骤:
(1)启动VisualC++6.0,用MFCAppWizard创建一个默认的单文档应用程序
myt。
(2)新建了一个DIB类,将DIB添加到myt工程,并在mytDoc.h和mytView.h
中添加头文件#include“cdib.h”。
(3)在ResourceView->
menu->
IDR-MAINFRAME中添加“文件”和“图像处
理”两个菜单,“文件”下添加“打开”、“另存为”和“退出”三个子菜
单,ID分别设为“ID_FILE_OPEN”、“ID_FILE_SAVE_AS”、
“ID_APP_EXIT”,再在MFCClassWizard中添加响应函数。
(4)添加工具栏按钮,再进行相关设置。
(5)图像处理功能编程。
A(利用类向导给“显示原图像的直方图”添加相应消息响应函数,加入直
方图的绘制代码。
B(利用类向导给“图像直方图均衡化”添加相应消息响应函数,并在函数
体中加入相应代码。
C(编译运行,完善代码。
3部分主要程序代码
原图:
voidCMytView:
:
OnYuantu()
{
3
CMytDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
filename=pDoc->
filename;
state1=1;
Invalidate();
m_yuantuDlg.DestroyWindow();
m_yuantuDlg.Create(filename);
m_yuantuDlg.ShowWindow(SW_SHOW);
}
OnResult(){
m_resultDlg.DestroyWindow();
m_resultDlg.Create(CDibNew1);
m_resultDlg.ShowWindow(SW_SHOW);
原图直方图:
OnYuantuzhifangtu(){
inti;
CopyToNew();
//各颜色分量的灰度分布密度
floatmidu[256];
//计算灰度分布密度
CDibNew1->
ZhiFangTu(midu);
//调用灰度统计处理函数
4
//创建对话框
CZhiFangTuDlg*dlg3;
dlg3=newCZhiFangTuDlg(this);
dlg3->
Create(IDD_DIALOG3);
//传递灰度分布密度数据给面板类
for(i=0;
i<
256;
i++)
m_fIntensity[i]=midu[i];
//显示对话框,由用户进行灰度折线变换
ShowWindow(SW_RESTORE);
均衡化:
OnFenbujunhenghua(){
state3=0;
ZhiFangTu(midu2);
CZhiFangTuDlg*dlg2;
dlg2=newCZhiFangTuDlg(this);
dlg2->
5
m_fIntensity[i]=midu2[i];
if(CDibNew1->
m_pBitmapInfoHeader->
biBitCount<
9)//灰度图像
Fenbujunhenghua();
//调用分布均衡化处理函数
else//24位彩色
CopyToNew2();
均衡化后直方图:
OnZhifangtutongji(){
pDoc->
statedoc=0;
state2=1;
6
CZhiFangTuDlg*dlg;
dlg=newCZhiFangTuDlg(this);
dlg->
//显示处理后的直方图
}
4运行结果
图4.1原图像
7
图4.2原图像直方图
4.3均衡化后图像
8
图4.4均衡化后直方图
五、总结心得
C++是在这学期才开始学的,对于它的使用范围以及设计方法没有什么概念,经过这一个学期的学习,总算对C++有了一定的认识,对VC6.0的使用也越来越熟悉了。
在这次大作业中,我做的题目是图像直方图均衡化,说实在的,平时很少自己动手真正的去做每一个实验,更何况,这学期的实验还没有做多少。
对于我来说要去实现这项功能还是很难的。
刚开始,真的不知道要怎么开始,只是想着还是先收集资料吧,于是就这样开始了我的作业。
图像直方图均衡化通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。
仅仅知道了什么事图像直方图均衡化是不够的,在实际操作中,我们还得弄清楚怎样用C++去实现它。
C++不是很熟悉,只是知道一些简单的模块,类,子类等,实际应用还是有缺陷的。
通过查阅资料,我发现大多数图像处理都是基于与设备无关位图(DIB)来进行讨论的,但是微软没有将DIB相关内容封装为一类,为了便于读取和今后的处理,只能自己建一个类,在参照《VC++图像处理程序设计》下建了个DIB类,将DIB添加到myt工程。
同时在mytDoc.h和mytView.h中添加头文件#include
9
“cdib.h”。
经过大量的反复操作,修改,终于实现了简单的功能,但对于所有的要实现的功能还有一点差距,我相信在我的努力下,我一定能够完成的。
对于将打开的图像用对话框显示,还真是不太会,因为它涉及到函数的使用,对于函数,我不知道该怎样去用它。
后来在同学们的帮助下实现了功能,在直方图的显示和均衡化的处理中,在书上能找到相应的代码,虽然编译运行的时候还是遇到了很多错误,但是还好不是程序的问题,只是软件的不兼容性。
当然,在这次作业中暴露出很多相关知识的欠缺和经验的不足,但是,在自己认真学习之后,我的理论知识得到了很大的提高,自己的动手能力也有了很大的进步。
经过这次作业,我真的学到了很多知识。
以前自己不会的,不熟悉的知识,在这次作业中都有了很大的提高。
现在,自己储存的知识相对以前要多很多。
现在使用VisualC++6.0要熟悉很多,尤其是一些控件的使用。
从开始着手去做到最终完成,虽然是很辛苦,但是学到了很多东西,希望自己以后能够学到更多,能够学以致用。
10