
浅析数字图像的直方图统计(共8页).doc
7页实验二 数字图像的直方图统计一、实验目的1.了解对灰度图像进行直方图统计的基本原理;2.掌握用VC编程实现直方图统计的方法;3.在微机上调试程序;5. 分析数字图像直方图的特点二、实验原理图像的直方图图像的(灰度统计)直方图是一个一维的离散函数它的定义为:设sk为图像f(x,y)的第k级灰度值,nk是f(x,y)中具有灰度值sk的象素的个数,n是图像象素总数,则:ps(sk)= nk/n k=0,1,,L-1称为图像f(x,y)的直方图这里ps(sk)代表原始图中第k个灰度级的出现概率以nk为自变量,以ps(sk)为函数,得到的曲线就是图像的直方图,在实际中常常直接将对第k个灰度级的统计值nk作为图像的直方图它提供了原图灰度值的分布情况,也可以说给出了一幅图所有灰度值的整体描述对灰度图像进行直方图统计的程序流程图如图2-1所示输入图像按照图像中灰度的级数建立数组G(i)如果f(x,y)=i,则,G(i)=G(i)+1输出直方图 图2-1 灰度图像直方图统计流程三、实验前准备1.预习本实验中关于数字图像直方图统计的有关内容;2. 预习VC中添加对话框的步骤和方法;3.了解本实验的目的和实验内容。
四、实验内容1.在实验一的基础上读入并显示一幅数字图像;2.编写对灰度图像进行直方图统计的程序,并将结果显示在屏幕上五、实验报告要求1.总结对灰度图像进行直方图统计的过程,比较不同的图像其直方图特性;2.对实验结果进行分析六、参考步骤和程序在实验一的基础上,进行如下操作:1、 点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为ID_HIST,对话框名称改为“直方图”2、 在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为ID_HIST这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID设为IDC_HISTSHOW;3、 快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中4、 在Hist.h文件“public:”下面输入如下变量定义:LONG m_lCount[256]; char* m_lpDIBBits; LONG m_lWidth; LONG m_lHeight; int m_iIsDraging; CDlgIntensity(CWnd* pParent = NULL);5、 打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here”前将如下代码拷贝进去:unsigned char* lpSrc; LONG i; LONG j;6、 在“// TODO: Add extra initialization here”后将如下代码拷贝进去:CWnd* pWnd=GetDlgItem(IDC_HISTSHOW); pWnd->GetClientRect(m_MouseRect); pWnd->ClientToScreen(&m_MouseRect); CRect rect; GetClientRect(rect); ClientToScreen(&rect); m_MouseRect.top-=rect.top; m_MouseRect.left-=rect.left; m_MouseRect.top+=25; m_MouseRect.left+=10; m_MouseRect.bottom=m_MouseRect.top+255; m_MouseRect.right=m_MouseRect.left+256; for(i=0;i<256;i++) { m_lCount[i]=0; } LONG lLineBytes; lLineBytes=WIDTHBYTES(m_lWidth*8); for(i=0;i
点“查看”下面的虚线框右键——点“属性”,输入标题(直方图),和ID(大写英文,如ID_VIEW_HIST),这样就将按钮和程序通过ID联系起来了,点击该按钮,就会执行相应的程序下面为该按钮添加函数:点Ctrl+W ,出现MFC ClassWizard对话框,选Class name为CMy111View,在Object IDs对应的选项中选中设置的ID(如为ID_VIEW_HIST),在Messages选项中选中COMMAND,然后点击“Add Function”按钮,选默认设置,就为ID_VIEW_HIST添加了相应的函数OnViewHist()该函数在111View.cpp文件中定义,在函数void CMy111View:: OnViewHist()添加如下代码:// TODO: Add your command handler code here CMy111Doc* pDoc=GetDocument(); if(pDoc->m_hDIB==NULL) { MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK); return; } LPSTR lpDIB; LPSTR lpDIBBits; lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB()); lpDIBBits=::FindDIBBits(lpDIB); if(::DIBNumColors(lpDIB)!=256) { MessageBox("目前只支持查看256色位图灰。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





