数字图像处理实验报告_直方图均衡化.doc_第1页
数字图像处理实验报告_直方图均衡化.doc_第2页
数字图像处理实验报告_直方图均衡化.doc_第3页
数字图像处理实验报告_直方图均衡化.doc_第4页
数字图像处理实验报告_直方图均衡化.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计课程名称 数字图像处理 题目名称 直方图均衡化 学生学院 信息工程学院 专业班级 08级电信2班 学 号 3208002664 学生姓名 陈慕仪 指导教师 曹江中 2011 年 7 月 1 日设计题目:直方图均衡化1、直方图的理论基础:(1)直方图概念:灰度直方图表示图像中每种灰度出现的频率。(2)直方图的作用: 反映一幅图像的灰度分布特性(3)直方图的计算:式中:nk为图像中出现rk级灰度的像素数,n是图像像素总数,而nk/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_FILEstatic char THIS_FILE = _FILE_;#endif/ CCqxhistViewIMPLEMENT_DYNCREATE(CCqxhistView, CView)BEGIN_MESSAGE_MAP(CCqxhistView, CView)/AFX_MSG_MAP(CCqxhistView)ON_COMMAND(ID_OPEN_IMAGE, OnOpenImage)ON_COMMAND(ID_HIST_IMAGE, OnHistImage)/AFX_MSG_MAP/ Standard printing commandsON_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/destructionCCqxhistView:CCqxhistView()/ TODO: add construction code hereCCqxhistView:CCqxhistView()BOOL CCqxhistView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CCqxhistView drawingvoid CCqxhistView:OnDraw(CDC* pDC)CCqxhistDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereif(m_dib.m_bLoaded=true) /判断是否加载图像/获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();/ 显示图像(具体的参数见CDIB类的该函数说明)m_dib.ShowDIB(pDC,10,10,nw,nh,m_dib.m_pDIBData,m_dib.m_pBMI);m_dib.ShowDIB(pDC,400,10,nw,nh,m_dib.m_pDumpDIBData,m_dib.m_pBMI);if(m_bHist=true) /绘制原图像的直方图CString str;int nh=m_dib.GetDIBHeight();int i;/画坐标轴/ 绘制坐标轴pDC-MoveTo(410,nh+20); /(410,nh+20 )是直方图的左上角坐标 / 垂直轴pDC-LineTo(410,nh+200);/(410,nh+200 )是直方图的左下角坐标 / 水平轴pDC-LineTo(710,nh+200);/(710,nh+200 )是直方图的右下角坐标 / 写X轴刻度值str.Format(0);pDC-TextOut(410, nh+200+10, str);str.Format(50);pDC-TextOut(460, nh+200+10, str);str.Format(100);pDC-TextOut(510, nh+200+10, str);str.Format(150);pDC-TextOut(560, nh+200+10, str);str.Format(200);pDC-TextOut(610, nh+200+10, str);str.Format(255);pDC-TextOut(665, nh+200+10, str);/ 绘制X轴刻度for ( i = 0; i MoveTo(i + 10, nh+200-2);pDC-LineTo(i + 10, nh+200+2);else/ 10的倍数pDC-MoveTo(i + 10, nh+200-2);pDC-LineTo(i + 10, nh+200+2);/ 绘制X轴箭头pDC-MoveTo(705,nh+200-5);pDC-LineTo(710,nh+200);pDC-LineTo(705,nh+200+5);/ 绘制y轴箭头pDC-MoveTo(410,nh+20);pDC-LineTo(405,nh+20+5);pDC-MoveTo(410,nh+20);pDC-LineTo(415,nh+20+5);int max=0;for(i=0;imax)max=m_yuani;for(i=0;iMoveTo(410+i,nh+200);pDC-LineTo(410+i,nh+200-(m_yuani*160/max);if(m_bHist=true)/绘画直方图CString str;int nh=m_dib.GetDIBHeight();int i;/画坐标轴/ 绘制坐标轴pDC-MoveTo(10,nh+20); /(10,nh+20 )是直方图的左上角坐标 / 垂直轴pDC-LineTo(10,nh+200);/(10,nh+200 )是直方图的左下角坐标 / 水平轴pDC-LineTo(310,nh+200);/(310,nh+200 )是直方图的右下角坐标 / 写X轴刻度值str.Format(0);pDC-TextOut(10, nh+200+10, str);str.Format(50);pDC-TextOut(60, nh+200+10, str);str.Format(100);pDC-TextOut(110, nh+200+10, str);str.Format(150);pDC-TextOut(160, nh+200+10, str);str.Format(200);pDC-TextOut(210, nh+200+10, str);str.Format(255);pDC-TextOut(265, nh+200+10, str);/ 绘制X轴刻度for ( i = 0; i MoveTo(i + 10, nh+200-2);pDC-LineTo(i + 10, nh+200+2);else/ 10的倍数pDC-MoveTo(i + 10, nh+200-2);pDC-LineTo(i + 10, nh+200+2);/ 绘制X轴箭头pDC-MoveTo(305,nh+200-5);pDC-LineTo(310,nh+200);pDC-LineTo(305,nh+200+5);/ 绘制y轴箭头pDC-MoveTo(10,nh+20);pDC-LineTo(5,nh+20+5);pDC-MoveTo(10,nh+20);pDC-LineTo(15,nh+20+5);int max=0;for(i=0;imax)max=m_histi;for(i=0;iMoveTo(10+i,nh+200);pDC-LineTo(10+i,nh+200-(m_histi*160/max);/ CCqxhistView printingBOOL CCqxhistView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CCqxhistView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CCqxhistView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CCqxhistView diagnostics#ifdef _DEBUGvoid CCqxhistView:AssertValid() constCView:AssertValid();void CCqxhistView:Dump(CDumpContext& dc) constCView:Dump(dc);CCqxhistDoc* CCqxhistView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CCqxhistDoc);return (CCqxhistDoc*)m_pDocument;#endif /_DEBUG/ CCqxhistView message handlersvoid CCqxhistView:OnOpenImage() / TODO: Add your command handler code here/ TODO: Add your command handler code herestatic char szFilter=BMP文件(*.bmp)|*.bmp|; /定义过滤文件的类型 CFileDialog dlg(TRUE,bmp,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);/定义文件对话框对象 CString filename;int ret=dlg.DoModal(); /运行打开文件对方框if(ret=IDOK)filename=dlg.GetFileName(); /获取所选择图像的路径 m_dib.LoadFromFile(filename); /加载图像 if(!m_dib.m_bLoaded) /判断是否加载图像成功AfxMessageBox(图像打不开); return;for(int i=0;i256;i+) /初始化直方图数组 m_histi=0; m_yuani=0; m_bHist=false;int nw=m_dib.GetDIBWidth(); int nh=m_dib.GetDIBHeight(); for(int j=0;jnh;j+)for(int i=0;inw;i+) BYTE temp=m_dib.m_pdataj*nw+i; m_yuantemp+;Invalidate(1);/刷新屏幕void CCqxhistView:OnHistImage() / TODO: Add your command handler code here/功能:实现直方图均衡化/判断图像是否打开,没打开,则弹出提示框并退出函数if(!m_dib.m_bLoaded) AfxMessageBox(图像还打开,请先打开图像!);return; /获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j,k; int count256=0;/定义一个数组,用于存放灰度级个数 float p256;/定义一个数组,用于存放灰度级出现频率/对图像进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论