数字图像处理及分析实验五.docx
- 文档编号:3263117
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:13
- 大小:143.94KB
数字图像处理及分析实验五.docx
《数字图像处理及分析实验五.docx》由会员分享,可在线阅读,更多相关《数字图像处理及分析实验五.docx(13页珍藏版)》请在冰豆网上搜索。
数字图像处理及分析实验五
西华数学与计算机学院上机实践报告
课程名称:
计算机图形学
年级:
2011
上机实践成绩:
指导教师:
罗晓辉
姓名:
徐千
上机实践名称:
形态学变化
学号:
312011*********
上机实践日期:
2013.11.03
上机实践编号:
5
上机实践时间:
14:
00-18:
00
一、目的
理解腐蚀及膨胀的基本原理,掌握基本的生成腐蚀及膨胀算法,并实现腐蚀及膨胀的图片效果,利用C++实现腐蚀及膨胀的图片效果功能并处理图片效果。
二、内容与设计思想
内容:
(1)了解腐蚀及膨胀原理。
膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。
①膨胀
是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的。
A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的。
我们可以把上式改写为:
结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的。
⑴用结构元素B,扫描图像A的每一个像素
⑵用结构元素与其覆盖的二值图像做“与”操作
⑶如果都为0,结果图像的该像素为0。
否则为1
②腐蚀
对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴用结构元素B,扫描图像A的每一个像素
⑵用结构元素与其覆盖的二值图像做“与”操作
⑶如果都为1,结果图像的该像素为1。
否则为0
腐蚀处理的结果是使原来的二值图像减小一圈。
(2)掌握基本的生成图像平滑、中值滤波以及拉普拉斯锐化算法
(3)利用C++分别实现生成图像平滑、中值滤波以及拉普拉斯锐化。
(4)利用该算法在屏幕上处理图片的效果。
设计思想:
腐蚀:
打开工作区,在图像处理实验算法下的CAView中ErosionDIB函数下编写程序
lpDIB指向源图像的指针
lpDIBBits指向源图像像素起始位置的指针
lWidth是图像宽度
lHeight是图像高度
首先读入原图像中的一个点(称为当前点)的像素值,并把缓存图象中对应位子的点赋为黑色.然后把结构元素(在此指定为1*3)”覆盖”在原图像中以当前点为中心的区域上,如果在结构元素中某点为黑色而下面原图像中对应的点为白色,则把缓存图像中当前点赋为白色,即腐蚀掉.这样将原图像中所有的点读入一遍,在缓存图像中就得到了原图像的腐蚀结果.注意,为了防止越界不处理最左边和最右边的两列像素.
膨胀:
打开工作区,在图像处理实验算法下的CAView中DilationDIB函数下编写程序
lpDIB指向源图像的指针
lpDIBBits指向源图像像素起始位置的指针
lWidth是图像宽度
lHeight是图像高度
膨胀运算和腐蚀运算类似,不同的是首先把缓存图像中的当前点赋为白色,而只要结构元素中某点和原图像中与之对应的点都为黑色,则把缓存图像中的当前点赋为黑色,即进行了膨胀.此处结构元素为1*3,为了防止越界不处理最左边和最右边的两列像素.
(4)仿照原理,编写代码,分别用膨胀运算和腐蚀运算处理图片。
(5)调试、编译、生成程序。
(6)处理图片。
三、使用环境
Microsoftvisualc++6.0
Windows7
四、核心代码及调试过程.(实验结果)
voidCAView:
:
OnMorphErosion()
{
//腐蚀运算
BackForUndo(GetDocument()->GetHDIB());
//获取文档
CADoc*pDoc=GetDocument();
//指向DIB的指针
LPSTRlpDIB;
//指向DIB象素指针
LPSTRlpDIBBits;
//锁定DIB
lpDIB=(LPSTR):
:
GlobalLock((HGLOBAL)pDoc->GetHDIB());
//更改光标形状
BeginWaitCursor();
//找到DIB图像象素起始位置
lpDIBBits=:
:
FindDIBBits(lpDIB);
//图像的宽度和高度
LONGlWidth;
LONGlHeight;
lWidth=:
:
DIBWidth(lpDIB);/*获取图像的"宽度"(4的倍数)*/
lHeight=:
:
DIBHeight(lpDIB);/*获取图像的高度*/
//调用ErosionDIB()函数腐蚀DIB
if(ErosionDIB(lpDIBBits,lWidth,lHeight))
{
//设置脏标记
pDoc->SetModifiedFlag(TRUE);
//更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
//提示用户
MessageBox("请检查程序");
}
//解除锁定
:
:
GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
//恢复光标
EndWaitCursor();
}
BOOLCAView:
:
ErosionDIB(LPSTRlpDIBBits,LONGlWidth,LONGlHeight)
{
/********************
//DIB图像象素起始位置
LPSTRlpDIBBits;
//图像的宽度和高度
LONGlWidth;
LONGlHeight;
*************************/
//指向源图像的指针
LPSTRlpSrc;
//指向缓存图像的指针
LPSTRlpDst;
//指向缓存DIB图像的指针
LPSTRlpNewDIBBits;
HLOCALhNewDIBBits;
//循环变量
longi;
longj;
intm,n,flag;
//像素值
unsignedcharpixel;
//暂时分配内存,以保存新图像
hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight);
if(hNewDIBBits==NULL)
{
//分配内存失败
returnFALSE;
}
//锁定内存
lpNewDIBBits=(char*)LocalLock(hNewDIBBits);
//初始化新分配的内存,设定初始值为255
lpDst=(char*)lpNewDIBBits;
memset(lpDst,(BYTE)255,lWidth*lHeight);
///////////////////////////////////////////////////
//使用水平方向的结构元素进行腐蚀
for(j=0;j { for(i=1;i { //由于使用1×3的结构元素,为防止越界,所以不处理最左边和最右边的两列像素 //指向源图像倒数第j行,第i个象素的指针 lpSrc=(char*)lpDIBBits+lWidth*j+i; //指向目标图像倒数第j行,第i个象素的指针 lpDst=(char*)lpNewDIBBits+lWidth*j+i; //取得当前指针处的像素值,注意要转换为unsignedchar型 pixel=(unsignedchar)*lpSrc; //目标图像中的当前点先赋成黑色 *lpDst=(unsignedchar)0; //如果源图像中当前点自身或者左右有一个点不是黑色, //则将目标图像中的当前点赋成白色 flag=0; for(m=0;m<3;m++) for(n=0;n<3;n++) { pixel=*(lpSrc+(m-1)*lWidth+n-1); if(pixel==255) { *lpDst=(unsignedchar)255; flag=1; } if(flag==1) break; } } } //复制腐蚀后的图像 memcpy(lpDIBBits,lpNewDIBBits,lWidth*lHeight); //释放内存 LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits); //返回 returnTRUE; } voidCAView: : OnMorphDilation() { //膨胀运算 BackForUndo(GetDocument()->GetHDIB()); //获取文档 CADoc*pDoc=GetDocument(); //指向DIB的指针 LPSTRlpDIB; //指向DIB象素指针 LPSTRlpDIBBits; //锁定DIB lpDIB=(LPSTR): : GlobalLock((HGLOBAL)pDoc->GetHDIB()); //更改光标形状 BeginWaitCursor(); //找到DIB图像象素起始位置 lpDIBBits=: : FindDIBBits(lpDIB); //图像的宽度和高度 LONGlWidth; LONGlHeight; lWidth=: : DIBWidth(lpDIB);/*获取图像的"宽度"(4的倍数)*/ lHeight=: : DIBHeight(lpDIB);/*获取图像的高度*/ //调用DilationDIB()函数膨胀DIB if(DilationDIB(lpDIBBits,lWidth,lHeight)) { //设置脏标记 pDoc->SetModifiedFlag(TRUE); //更新视图 pDoc->UpdateAllViews(NULL); } else { //提示用户 MessageBox("请检查程序"); } //解除锁定 : : GlobalUnlock((HGLOBAL)pDoc->GetHDIB()); //恢复光标 EndWaitCursor(); } BOOLCAView: : DilationDIB(LPSTRlpDIBBits,LONGlWidth,LONGlHeight) { /******************** //DIB图像象素起始位置 LPSTRlpDIBBits; //图像的宽度和高度 LONGlWidth; LONGlHeight; *************************/ //指向
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 分析 实验