ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:261.15KB ,
资源ID:12233735      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12233735.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字图像处理实验报告 直方图均衡化.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字图像处理实验报告 直方图均衡化.docx

1、数字图像处理实验报告 直方图均衡化课 程 设 计课程名称 数字图像处理 题目名称 直方图均衡化 学生学院 信息工程学院 专业班级 08级电信2班 学 号 3208002664 学生姓名 陈慕仪 指导教师 曹江中 2011 年 7 月 1 日设计题目:直方图均衡化1、直方图的理论基础:(1)直方图概念:灰度直方图表示图像中每种灰度出现的频率。(2)直方图的作用: 反映一幅图像的灰度分布特性(3)直方图的计算:式中:nk为图像中出现rk级灰度的像素数,n是图像像素总数,而nk/n即为频数。2、设计目的: 产生一幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,达到了图象增强的目的。3、直

2、方图均衡化的效果 : 1)变换后直方图趋向平坦,灰级减少,灰度合并。 2)原始象含有象素数多的几个灰级间隔被拉大了,压缩的只是象素数少的几个灰度级,实际视觉能够接收的信息量大大地增强了,增加了图象的反差。同时,也增加了图象的可视粒度。 4、离散情况下的直方图均衡化的算法:A、列出原始图像的灰度级 B、统计各灰度级的像素数目C、计算原始图像直方图各灰度级的频数D、计算累积分布函数F、应用以下公式计算映射后的输出图像的灰度级,P为输出图像灰度级的个数,其中INT为取整符号:G、用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像。3、源程序代码 / cqxhistView.cp

3、p : 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

4、) /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:OnFilePrintPre

5、view)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 cs return CView:Pre

6、CreateWindow(cs);/ CCqxhistView drawingvoid 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(); / 显示图像(具体的参数见CDIB类的该函数说明) m

7、_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);/(41

8、0,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)

9、; 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); p

10、DC-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.GetDIBHe

11、ight(); 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(10

12、0); 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 + 1

13、0, 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

14、-LineTo(10+i,nh+200-(m_histi*160/max); / CCqxhistView printingBOOL CCqxhistView:OnPreparePrinting(CPrintInfo* pInfo) / default preparation return DoPreparePrinting(pInfo);void CCqxhistView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) / TODO: add extra initialization before printingvoid CCqxh

15、istView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) / TODO: add cleanup after printing/ CCqxhistView diagnostics#ifdef _DEBUGvoid CCqxhistView:AssertValid() const CView:AssertValid();void CCqxhistView:Dump(CDumpContext& dc) const CView:Dump(dc);CCqxhistDoc* CCqxhistView:GetDocument() / non-de

16、bug version is inline ASSERT(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 here static char szFilter=BMP文件

17、(*.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) /判断是否加载图像成功 AfxMessage

18、Box(图像打不开); 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 co

19、mmand 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;/定义一个数组,用于存放灰度级出现频率 /对图像进行直方图均衡化处理 for(i=0;inh;i+) for(

20、j=0;jnw;j+) k=m_dib.m_pdatai*nw+j;/计算灰度级个数 countk+; for(k=0;k256;k+) pk=countk/(nw*nh*1.0f); float c256=0; float sum=0.0; int ngray256;/新的灰度级 for(k=0;k256;k+)/计算累积频率 sum+=pk; ck=sum; ngrayk=(int)(255.0*ck+0.5); for(i=0;inh;i+) for(j=0;jnw;j+) k=m_dib.m_pdatai*nw+j; m_dib.m_pdatai*nw+j=ngrayk; 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_histtemp+; /将修改的m_pdata的数据赋值给m_pDIBData,以显示修改的结果 m_dib.UpdateData(); m_bHist=true; /将修改的m_pdata的数据赋值给m_pDIBData,以显示修改的结果 m_dib.UpdateData(); /刷新屏幕 Invalidate(); 4、实验结果C+编程结果:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1