欢迎来到天天文库
浏览记录
ID:42680668
大小:564.00 KB
页数:23页
时间:2019-09-20
《直方图图像处理报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、图像处理上机报告学号:班级:姓名:指导老师上机目标一:实现bmp图片的直方图的显示。目标分析:要实现目标一,首先需做到的时对bmp图片的读取与显示;然后才能对图片进行灰度统计,如果是彩色图片可以先将之灰度化再统计,或者直接对其R、G、B三个直方图进行分别显示。在此我做的是选择将彩色图片进行灰度化然后再统计灰度值,实现直方图的显示。大体算法步骤:1、对bmp图读取与显示用的是何兴恒老师的程序(具体分析在下部分)。2、如果是彩色图片则对其进行灰度化,然后统计其灰度值。3、对图片实行灰度化统计后,进行
2、直方图的显示。算法及数据结构:算法步骤1:Bmp图的读取显示:GetBmpSize(fname,&dx,&dy)获取图像大小;UINT*buf=newUINT[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型的
3、指针变量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_
4、DHist[256]数组,从第一个像素点开始如果其灰度值为i则m_DHist[i]++,直到所有像素点都统计完。然后是直方图显示对话框的制作,用MFC类中的函数Moveto()及Lineto()实现画图,需要注意的一点是对于纵轴来说,先找最大的m_DHist[j]将其画在第j个刻度点处,且将其画满纵轴,后面每个m_DHist值都与最大的灰度值进行百分比的计算,画最高灰度的百分比长度,这样可以使整个直方图更加平衡,可读性更强。具体函数在onDilagHist类中的OnPaint()函数。上机目标二
5、:实现图像平滑三个算法及锐化的三个算法。目标分析:对于这六种算法的实现,只是模板系数的不同。这里需要实现对彩色图像的处理,只需将图像的RGB值分别处理即可。大致算法步骤:1、分别存每一点的RGB值;为的是方便后面的利用。2、从第一个像素点开始,分R、G、B取其值及其周围8个像素点对应的值。这里需对边缘化的像素点进行特殊处理。3、进行计算并将此像素点赋予计算值。算法实现及数据结构:由于这六种算法的实现步骤一样只是模板系数的不同,因此值具体分析其中一种的实现。首先是平滑的三个模板:m[9]={1,1
6、,1,1,1,11,1,1};除数9。m[9]={1,1,1,1,2,11,1,1};除数10。m[9]={1,2,1,2,1,21,2,1};除数16。然后是锐化的3个模板:m[9]={-1,-1,-1,-1,9,-1-1,-1,-1};m[9]={0,-1,0,-1,5,-10,-1,0};m[9]={1,-2,1,-2,5,-21,-2,1};算法步骤实现:分别存每一点得像素值。定义一个UCHAR型的指针*c指向内存MDBUF;并定义4个二维数组B[j][i]、G[j][i]、R[j][i
7、]、A[j][i]来实现横坐标i,纵坐标j的像素点BGRA的存放。然后是某个像素点及其周围像素点的取,这里我分9种情况用if(){}elseif(){}……来判断。将一幅图像素点抽象为一个二维网格。具体可用下图表示:则分四个顶点,上下边缘及左右边缘。通过GetXS()函数取得某个像素点的B、G、R、A值分别用b[9]、g[9]、r[9]、a[9]来存。例如用网格表示某个像素点及其周围像素点B值。b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]最后是把各个像素点值通过模板计
8、算后赋给指向内存的指针c[0]、c[1]、c[2]、c[3]。进行dx*dy此循环,每一循环后c+=4。此处要注意的是要防止RGBA值的溢出,于是这里有一个判断如果大于255则赋值255如果小于0则赋值0.最后实现处理后图片的显示。操作界面实现:通过VC++平台中的MFCAppWizard创建一个基于MFC的单文档界面(SDI)应用程序。在建立的单文档程序中加入何老师程序中的tools.h及tools.cpp。这样我们就可以借鉴何老师程序来完成文件打开显示。然后通过ResourceView来添加
此文档下载收益归作者所有