直方图均衡化
目录
1设计方案及功能描述 (1)
2实现步骤 (3)
3部分主要程序代码 (3)
4运行结果 (7)
5总结心得 (9)
1设计方案及功能描述
1.1 直方图均衡化
图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非
线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的
亮度来实现这种功能。这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来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?f?L-1有0?g?L-1,这个条件保证了变换前后灰度值动态范围的一致性。累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为: gk = EQ(fk) = (ni/n) = pf(fi) , (k=0,1,2,……,L-1) 上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。
1.2直方图计算
图像的灰度统计直方图是一个1—D的离散函数:
/n p()= k=0,1,…,L-1 (1) snkk
上式中为图形f(x,y)的第k级灰度值,是f(x,y)中具有灰度值的像素的个snskkk数,n是图像像素总数。因为p()给出了对出现概率的一个估计,所以直方sk
图提供了原图像的灰度值分布情况,也可以说是给出了一幅图像所有灰度值的整体描述。
1.3直方图均衡化
直方图均衡化的基本思想是把原始图像的直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围从而达到增强图像整体对比度的效果。将 (1)表示为:
/n p()= 0??1 ssnkkk
k=0,1,…,L-1 (2)
这里p()代表原始图像第k个灰度级的出现概率。以为自变量,以snkkp()为函数得到的曲线就是图像的直方图。 sk
可以看到,增强函数需要满足两个条件:
1. EH(s)在0??L-1范围内是一个单值单增函数; sk
2
2. 对0??L-1有0?EH(s)?L-1 sk
可以证明累积分布函数(CDF)满足上述两个条件并能将s的分布转换为t的均匀分布。事实上s的CDF就是原始图的累积直方图,在这种情况下有: kkni 0??1 ,EH(),,ps,,,,tssskkki,,i0i0n
k=0,1,…,L-1 (3) 由上式可见,根据原图像直方图可以直接算出直方图均衡
化后各像素的灰度值。当然实际中还要对取整以满足数字图像的要求。 tk 2实现步骤
项目工程实现步骤:
(1) 启动Visual C++6.0,用MFC AppWizard创建一个默认的单文档应用程序
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”,再在MFC ClassWizard中添加响应函数。 (4) 添加工具栏
按钮,再进行相关设置。
(5) 图像处理功能编程。
A(利用类向导给“显示原图像的直方图”添加相应消息响应函数,加入直
方图的绘制代码。
B(利用类向导给“图像直方图均衡化”添加相应消息响应函数,并在函数
体中加入相应代码。
C(编译运行,完善代码。
3部分主要程序代码
原图:
void CMytView::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);
}
void CMytView::OnResult() {
m_resultDlg.DestroyWindow();
m_resultDlg.Create(CDibNew1);
m_resultDlg.ShowWindow(SW_SHOW);
}
原图直方图:
void CMytView::OnYuantuzhifangtu() {
int i;直方图均衡化方法
CopyToNew();
// 各颜分量的灰度分布密度
float midu[256];
// 计算灰度分布密度
CDibNew1->ZhiFangTu(midu); //调用灰度统计处理函数4
// 创建对话框
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论