- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验-数字图像的直方图统计
实验二 数字图像的直方图统计
一、实验目的
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所示。
图2-1 灰度图像直方图统计流程
三、实验前准备
1.预习本实验中关于数字图像直方图统计的有关内容;
2. 预习VC中添加对话框的步骤和方法;
3.了解本实验的目的和实验内容。
四、实验内容
1.在实验一的基础上读入并显示一幅数字图像;
2.编写对灰度图像进行直方图统计的程序,并将结果显示在屏幕上。
五、实验报告要求
1.总结对灰度图像进行直方图统计的过程,比较不同的图像其直方图特性;
2.对实验结果进行分析。
六、参考步骤和程序
在实验一的基础上,进行如下操作:
点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为ID_HIST,对话框名称改为“直方图”
在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为ID_HIST。这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID设为IDC_HISTSHOW;
快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。
在Hist.h文件“public:”下面输入如下变量定义:
LONG m_lCount[256];
char* m_lpDIBBits;
LONG m_lWidth;
LONG m_lHeight;
int m_iIsDraging;
CDlgIntensity(CWnd* pParent = NULL);
打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here”前将如下代码拷贝进去:
unsigned char* lpSrc;
LONG i;
LONG j;
在“// 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;i256;i++)
{
m_lCount[i]=0;
}
LONG lLineBytes;
lLineBytes=WIDTHBYTES(m_lWidth*8);
for(i=0;im_lHeight;i++)
{
for(j=0;jm_lWidth;j++)
{
lpSrc=(unsigned char*)m_lpDIBBits+lLineBytes*i+j;
m_lCount[*(lpSrc)]++;
}
}
m_iIsDraging=0;
7、在CHist::OnPaint()函数“CPaintDC dc(this);”前将如下代码拷如其中:
CString str;
LONG i;
LONG lMaxCount=0;
LONG m_iL
文档评论(0)