《《计算机图像处理》课程设计报告(共8页).doc》由会员分享,可在线阅读,更多相关《《计算机图像处理》课程设计报告(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上计算机图像处理课程设计报告题目 灰值图像形态学 专业 计算机科学与技术 班级 学号 姓名 指导教师签名 华东理工大学信息学院计算机系2013年5月15日一. 课程设计题目灰值图像形态学二. 日期2013.4.3-2013.5.8三. 环境(操作系统,开发语言)操作系统是Windows开发语言是Visual C+ 语言四. 设计内容(设计要求)(1) 开发一个基于Visual C+.NET 2003(或更高版本)MFC的图像的形态学处理的程序,必须用CImage类作为图像处理的对象。(2) 程序必须具备的功能:a) 可选择文件名,读入并显示一张原始图像文件。b) 在显示
2、的原始图像旁边显示至少二张不同的形态学处理后的图像。五. 说明(1) 说明使用的二种图像处理方法的名称,并对这二种图像处理方法的效果进行比较 说明:两种处理方法为:灰值形态学的腐蚀和灰值形态学的膨胀效果分析:l 灰值形态学腐蚀:就是把图像区域的内边界点变成背景,是区域缩小一圈。腐蚀可以消除目标图像所有边界点以及边界上的突出部分;分离两个目标之间的细小连通;腐蚀对于从一幅图像中去除一些小而无意义的目标是很有用的。算法中关键点是:g(j,k) = min f(j,k), f(j,k+1), f(j-1,k+1), f(j+1,k+1)l 灰值形态学膨胀 :就是将区域的外边界变成对象点,使区域扩大一
3、圈。膨胀运算把图像周围的点合并进图像;连通两个距离比较小的图像;在连接图像中的断续点和填补图像中的空洞是非常有用的。算法关键点是:g(j,k) = max f(j,k), f(j,k+1), f(j-1,k+1), f(j+1,k+1) (2) 处理前后的截图处理效果一:处理效果二:(3) 程序功能实现的关键函数及关键源代码关键函数和关键源代码如下:OnDraw( ):将工作画布WorkCanvas中的图像传送到屏幕画布CDC中void CImageView:OnDraw(CDC* pDC) CImageDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);
4、if (!pDoc)return;int nWidth,nHeight;if(!WorkCanvas.IsNull() nWidth=WorkCanvas.GetWidth(); nHeight=WorkCanvas.GetHeight(); WorkCanvas.BitBlt(*pDC,0,0,nWidth,nHeight,0,0,SRCCOPY); /用WorkCanvus的Bitblt()函数将WorkCanvus中的图象数据传送到画布(例如CClientDC或pDC)上 CopyImage( ):CImage类对象之间的复制,工作画布复制到副本画布void CopyImage(CIma
5、ge *pNewImage,CImage *pOldImage)CDC *pDC,*pNewDC;intnWidth,nHeight,nBitsPerPixel;nWidth=pOldImage-GetWidth();nHeight=pOldImage-GetHeight();nBitsPerPixel=pOldImage-GetBPP();if(!pNewImage-IsNull()/ 目标位图非空 pNewImage-Destroy();/ 删除目标位图pNewImage-Create(nWidth,nHeight,nBitsPerPixel,0);/建立CImage类对象新位图CopyC
6、olorTables(pNewImage,pOldImage);/复制调色板pDC=CDC:FromHandle(pOldImage-GetDC();/ 建立源位图CDC pNewDC=CDC:FromHandle(pNewImage-GetDC();/ 建立目标位图CDC pNewDC-BitBlt(0,0,nWidth,nHeight,pDC,0,0,SRCCOPY);/复制像素数据 pOldImage-ReleaseDC();/ 释放CDC指针 pNewImage-ReleaseDC();IndexToGreyImage( ):索引图像变灰阶图像void IndexToGreyImage
7、(CImage *pNewImage,CImage *pOldImage) RGBQUADColorTabs256;BYTEcOldPixel,cNewPixel;inti,y,x,nOldWidth,nOldHeight,nColorTableEntries;intRGBToGrey256;if(pOldImage-GetBPP()=8) nOldWidth=pOldImage-GetWidth();nOldHeight=pOldImage-GetHeight();/建立新图像if (!pNewImage-IsNull() pNewImage-Destroy(); /如果图像pNewImag
8、e非空,则清除原有图像(原位图) pNewImage-Create(nOldWidth,nOldHeight,8,0);/建立新图像/设置新图像的灰阶调色板for(i=0;iSetColorTable(0,256,ColorTabs);/设置新图像调色板/计算原图像调色板的RGB色彩数据与灰色数据关系nColorTableEntries=pOldImage-GetMaxColorTableEntries();pOldImage-GetColorTable(0,nColorTableEntries,ColorTabs);/取原索引图像调色板for(i=0;inColorTableEntries;
9、i+)/将原索引图像的调色板每项的RGB三种颜色计算成灰色数据RGBToGreyi=(int)(0.11*ColorTabsi.rgbBlue+0.59*ColorTabsi.rgbGreen+0.30*ColorTabsi.rgbRed);/修改原图像所有像素,将原索引图像每个对应RGB的数据修改为对应灰阶图像的数据for(y=0;ynOldHeight;y+)/逐行进行处理 for(x=0;xGetWidth(); nHeight=pOldImage-GetHeight(); for(y=1;ynHeight-1;y+)/逐行进行处理for (x=1;xnWidth-1;x+)/逐列进行处
10、理 cMin=255;for (i=-1;i2;i+) for (j=-1;j2;j+) cPixelValue=(BYTE)GetPixelValue(pOldImage,x+j,y+i);if (cPixelValueGetWidth();nHeight=pOldImage-GetHeight();for(y=1;ynHeight-1;y+)/逐行进行处理for (x=1;xnWidth-1;x+)/逐列进行处理 cMax=0;for (i=-1;i2;i+) for (j=-1;jcMax) cMax=cPixelValue;/寻找邻域极大(白)值SetPixelValueInIndex
11、Image(pNewImage,x,y,cMax);/灰值形态学膨胀处理为邻域极大(白)值void CImageView:OnGreyDilation()CClientDC dc(this);CImageImage;int nStartX,nStartY,nCanvasDrawWidth;if(!WorkCanvas.IsNull()/如果工作画布WorkCanvas非空 /显示原始工作画布WorkCanvas图像nStartX=0;nStartY=0;nCanvasDrawWidth=DrawCanvas(&WorkCanvas,&dc,nStartX,nStartY);/将工作画布WorkCanvas图像转化成灰值图像并放在Image中IndexToGreyImage(&Image,&WorkCanvas);/对Image图像进行灰值形态学膨胀处理,处理结果放在SaveCanvas中GreyDilation(&SaveCanvas,&Image);/显示SaveCanvas中处理后的图像nStartX+=2*(nCanvasDrawWidth+10);DrawCanvas(&SaveCanvas,&dc,nStartX,nStartY);专心-专注-专业