直方图图像处理报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图像处理上机报告 学号: 班级: 姓名: 指导老师 上机目标一: 实现bmp图片的直方图的显示。 目标分析: 要实现目标一,首先需做到的时对bmp图片的读取与显示; 然后才能对图片进行灰度统计,如果是彩色图片可以先将之灰度化再统计,或者直接对其R、G、B三个直方图进行分别显示。 在此我做的是选择将彩色图片进行灰度化然后再统计灰度值,实现直方图的显示。大体算法步骤: 对bmp图读取与显示用的是何兴恒老师的程序(具体分析在下部分)。 如果是彩色图片则对其进行灰度化,然后统计其灰度值。 对图片实行灰度化统计后,进行直方图的显示。 算法及数据结构: 算法步骤1: Bmp图的读取显示:GetBmpSize(fname,dx,dy)获取图像大小;UINT *buf=new UINT[dx*dy]; ReadBmp(fname,dx,dy,buf);申请一块动态内存buf大小为dx*dy来实现图像读取;MDBUF=buf; mdr-write_video(0,0,dx,dy,buf) ;mdr-swap();将图片放入内存并显示出来。具体函数:onFileOpen(); 算法步骤2: 彩色图片的灰度化。定义一个UCHAR型的指针变量c用来指向内存MDBUF;如c[0]、c[1]、c[2]、c[3]分别表示的是第一个像素点的B、G、R、A值。利用灰度化公式0.11*B+0.59*G+0.30R来实现。通过实现dx*dy(图像长宽积)次循环。以下为部分代码: for (j=0;j=x1*y1;j++) { c[0]=c[1]=c[2]=c[3]=(11*c[0]+59*c[1]+30*c[2])/100; c+=4; } 然后实现显示。具体在函数是view类的onHthShow()。 算法步骤3的实现: 灰度统计,定义一个int型m_DHist[256]数组,从第一个像素点开始如果其灰度值为i则m_DHist[i]++,直到所有像素点都统计完。然后是直方图显示对话框的制作,用MFC类中的函数Moveto()及Lineto()实现画图,需要注意的一点是对于纵轴来说,先找最大的m_DHist[j]将其画在第j个刻度点处,且将其画满纵轴,后面每个m_DHist值都与最大的灰度值进行百分比的计算,画最高灰度的百分比长度,这样可以使整个直方图更加平衡,可读性更强。具体函数在onDilagHist类中的OnPaint()函数。 上机目标二: 实现图像平滑三个算法及锐化的三个算法。 目标分析: 对于这六种算法的实现,只是模板系数的不同。这里需要实现对彩色图像的处理,只需将图像的RGB值分别处理即可。 大致算法步骤: 分别存每一点的RGB值;为的是方便后面的利用。 从第一个像素点开始,分R、G、B取其值及其周围8个像素点对应的值。这里需对边缘化的像素点进行特殊处理。 进行计算并将此像素点赋予计算值。 算法实现及数据结构: 由于这六种算法的实现步骤一样只是模板系数的不同,因此值具体分析其中一种的实现。 首先是平滑的三个模板: m[9]={1,1,1, 1,1,1 1,1,1} ;除数9 。 m[9]={1,1,1, 1,2,1 1,1,1} ;除数10 。 m[9]={1,2,1, 2,1,2 1,2,1} ;除数16 。 然后是锐化的3个模板: m[9]={-1,-1,-1, -1, 9,-1 -1, -1,-1} ; m[9]={0,-1,0, -1,5,-1 0,-1,0} ; m[9]={1,-2,1, -2,5,-2 1,-2,1} ; 算法步骤实现: 分别存每一点得像素值。定义一个UCHAR型的指针*c指向内存MDBUF;并定义4个二维数组B[j][i]、G[j][i]、R[j][i]、A[j][i]来实现横坐标i,纵坐标j的像素点BGRA的存放。 然后是某个像素点及其周围像素点的取,这里我分9种情况用if (){}else if(){}……来判断。将一幅图像素点抽象为一个二维网格。具体可用下图表示: 则分四个顶点,上下边缘及左右边缘。 通过GetXS()函数取得某个像素点的B、G、R、A值分别用b[9]、g[9]、r[9]、a[9]来存。 例如用网格表示某个像素点及其周围像素点B值。 b[0] b[1]

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档