数字图像处理实验报告 直方图均衡化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
课程名称数字图像处理
题目名称直方图均衡化
学生学院信息工程学院
专业班级 08级电信2班
学号 3208002664 学生姓名陈慕仪
指导教师曹江中
2011年7 月 1 日
设计题目:直方图均衡化
1、直方图的理论基础:
(1)直方图概念:灰度直方图表示图像中每种灰度出现的频率。 (2)直方图的作用: 反映一幅图像的灰度分布特性
(3)直方图的计算: 式中:n k 为图像中出现r k 级灰度的像素数,n 是图像像素总数,而n k /n 即为频数。 2、设计目的: 产生一幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,
达到了图象增强的目的。 3、直方图均衡化的效果 :
1)变换后直方图趋向平坦,灰级减少,灰度合并。
2)原始象含有象素数多的几个灰级间隔被拉大了,压缩的只是象素数少的几个灰
度级,实际视觉能够接收的信息量大大地增强了,增加了图象的反差。同
时,也增加了图象的可视粒度。
4、离散情况下的直方图均衡化的算法:
A 、列出原始图像的灰度级
B 、统计各灰度级的像素数目
C 、计算原始图像直方图各灰度级的频数
D 、计算累积分布函数
F 、应用以下公式计算映射后的输出图像的灰度级,P
为输出图像灰度级的个数,
其中INT 为取整符号:
G 、用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像。 3、源程序代码
// cqxhistView.cpp : implementation of the CCqxhistView class #include "stdafx.h" #include "cqxhist.h"
#include "cqxhistDoc.h" #include "cqxhistView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
///////////////////////////////////////////////////////////////////////////// // CCqxhistView
IMPLEMENT_DYNCREATE(CCqxhistView, CView)
BEGIN_MESSAGE_MAP(CCqxhistView, CView)
1
,,1,0,-=L j f j 1
,,1,0,-=L j n j 1
,,1,0,/)(-==L j n n f P j j f 1
,,,1,0,)()(0
-==
∑=L k j f P f C k j j
f
]
5.0)()[(min min max ++-=g f C g g INT g i n
n r p k
k =)(1,,2,1,010-=≤≤l k r k
//{{AFX_MSG_MAP(CCqxhistView)
ON_COMMAND(ID_OPEN_IMAGE, OnOpenImage)
ON_COMMAND(ID_HIST_IMAGE, OnHistImage)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CCqxhistView construction/destruction
CCqxhistView::CCqxhistView()
{
// TODO: add construction code here
}
CCqxhistView::~CCqxhistView()
{
}
BOOL CCqxhistView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
///////////////////////////////////////////////////////////////////////////// // CCqxhistView drawing
void CCqxhistView::OnDraw(CDC* pDC)
{
CCqxhistDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(m_dib.m_bLoaded==true) //判断是否加载图像
{
//获取图像宽和高
int nw=m_dib.GetDIBWidth();
int nh=m_dib.GetDIBHeight();