图像分割和二值数学形态学图象处理程序设计Word文档下载推荐.docx
- 文档编号:18404048
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:24
- 大小:607.49KB
图像分割和二值数学形态学图象处理程序设计Word文档下载推荐.docx
《图像分割和二值数学形态学图象处理程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图像分割和二值数学形态学图象处理程序设计Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
在图像分析中,通常需要将所关心的目标从图像中提取出来,这种从图像中将某个特定区域与其他部分进行分离并提取出来的处理,就是图像分割。
因为图像分析处理实际就是区分图像中的“前景目标”和“背景”,所以通常又称之为图像的二值化处理。
图像分割在图像分析、图像识别、图像检测等方面占有非常重要的地位。
在图象处理中,二值数学形态学是一种经典的算法,在图象处理与分析技术中,许多场合下对所拍摄的图象进行二值化处理,然后对分割出的目标区域进行几何特征的测量。
二值图象中的一种主要处理是对所提取的目标图形进行形态分析。
二值图像中的一种主要处理是对所提取的目标图形进行形态分析。
腐蚀处理的作用是将目标图形收缩,为了实现腐蚀,数学形态学提出了结构元素的概念。
所谓结构元素是指具有某种确定形状的基本结构元素,例如,一定大小的矩形、圆或者菱形等。
腐蚀处理可以表示成用结构元素对图像进行探测,找出图像中可以放下该结构元素的区域。
二、算法分析与描述
2.1基于阈值的图象分割
所谓阈值方法就是确定某个阈值Th,根据图像中每个像素的灰度值大于或小于该阈值Th,来进行图像分割。
阈值方法的数学模型如下:
设原图像为f(x,y),经过分割处理后的图像为g(x,y),g(x,y)为二值图像,则有
2.2二值数学形态学图像处理腐蚀
形态学运算是针对二值图象依据数学形态学(MathematicalMorphology)的集合论方法发展起来的图象处理方法。
数学形态学起源于岩相学对岩石结构的定量描述工作,近年来在数字图象处理和机器视觉领域中得到了广泛的应用,形成了一种独特的数字图象分析方法和理论。
通常形态学图象处理表现为一种邻域运算形式,一种特殊定义的邻域称之为“结构元素”(StructureElement),在每个象素位置上它与二值图象对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图象的相应象素。
形态学运算的效果取决于结构元素的大小、内容以及逻辑运算的性质。
给定二值图象I(x,y)和作为结构元素的二值模板T(i,j),则典型的腐蚀运算可表示成:
腐蚀是一种消除边界点,使边界向内部收缩的过程。
可以用来消除小且无意义的物体。
一般意义的腐蚀概念定义为:
也就是说,由B对X腐蚀所产生的二值图象E是满足以下条件的点(x,y)的集合:
如果B的原点平移到点(x,y),那么B将完全包含于X中。
根据以上原理,腐蚀运算的具体步骤如下:
1).扫描原图,找第一个像素值为1的点;
2).将预先设定好形状以及原点位置的结构元素的原点移动到该点;
3).判断该结构元素所覆盖范围内的像素值是否全部为1,如果是,则腐蚀后图像的相同位置上的像素值置为1,如果至少有一个像素的值为0,则腐蚀后图像的相同位置上的像素值置为0;
4).对原图中所有像素值为1的点重复进行2)和3
三、详细设计过程
3.1分割详细设计说明
类的属性说明:
double*m_pDbImage;
intm_nSupp;
intm_nDWTCurDepth;
类的行为说明:
intInitDocVariable();
intFreeDocVariable();
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&
dc)const;
BOOLDIBDWTStep(CDib*pDib,intnInv);
C06500131panzhangrongDoc*GetDocument();
afx_msgvoidOnEdgeRoberts();
afx_msgvoidOnEdgeSobel();
afx_msgvoidOnEdgePrewitt();
afx_msgvoidOnEdgeLaplace();
afx_msgvoidOnEdgeCanny();
afx_msgvoidOnEdgeTrack();
afx_msgvoidOnRegionGrow();
3.2腐蚀类的设计说明
1、程序运行中用到的运算:
VErosion()图象进行垂直方向上的腐蚀运算
HErosion()图象进行水平方向上的腐蚀运算
VHErosion()图象进行全方向腐蚀
2、主要函数说明
1).函数名称:
VErosion()
参数:
HDIBhDIB-待处理的DIB
返回值:
void-无返回值
说明:
该函数对图象进行垂直方向上的腐蚀
2).函数名称:
HErosion()
HDIBhDIB-待处理的DIB
该函数对图象进行水平方向上的腐蚀
3).函数名称:
VHErosion()
HDIBhDIB-待处理的DIB
该函数对图象进行全方向腐蚀
3、程序流程图如下:
图3、1流程图
四、调试过程中出现的问题及相应解决办法
1、函数在编译时出错,应为没有加入必须有的头文件#include"
math.h"
有"
头文件才能对出现的数学计算进行正确处理。
2、安装的创天中文VC++无法打开头文件"
afsrex.h"
。
3、所被用来做二值数学形态学图象处理的图像必须是24位色位图,若不是则需将其先转化。
图4-1显示出错的界面
五、程序运行截图及其说明
5.1阈值分割的截图
对图片草原进行运算,图片为24位,BMP格式,256*256
1.原图
2.固定阈值分割
2.腐蚀的截图
对图片树林进行运算,图片为24位,BMP格式,256*256
1.原图
2.水平腐蚀
3.垂直腐蚀
4.全方位腐蚀
六、简单操作手册
运行程序出现界面
图6.1程序界面
点击文件,再点击打开,打开原图,如下图6.2所示:
设计总结
这次的图象处理综合训练的工作量比较大,我投入了很多的时间和精力才完成了此次设计。
不过这些付出都是值得的,因为我收获了更多。
首先,在开发的过程中,我对操作系统及VC++的功能实现,特别是图像处理中图像分割和二值形态学的图像处理有了很深的了解。
最后,在图像处理综合训练的过程中,在很大程度上磨练了我的意志,同时锻炼了我个人的编程思维。
参考资料
[1]朱虹.计算机图象处理基础[M].科学出版社,2005
[2]RC.Gonzalez,RE.Woods著,阮秋琦,阮宇智等译.计算机图象处理(第2版).北京:
电子工业出版社,2003
[3]K.R.Castleman.计算机图象处理.北京:
电子工业出版社,2002
[4]章毓晋.图像处理与分析-图像工程(上册),清华大学,2001
[5]何斌等编著.VisualC++计算机图象处理.人民邮电出版社,2002
[6]张宏林编著.VisualC++计算机图象模式识别技术及工程实践.人民邮电出版社,2003.
[7]黄维通.VisualC++面向对象与可视化程序设计.清华大学出版社,2003
[8]RC.Gonzalez,RE.Woods,SL.Eddins著,阮秋琦,阮宇智等译.计算机图象处理(MATLAB版).北京:
电子工业出版社,2005
[9]杨枝灵等编著.VisualC++数字图像获取处理及实践应用.人民邮电出版社,2003
[10]何斌等编著.VisualC++数字图像处理(第二版).人民邮电出版社,2003
致谢
首先感谢我的指导老师柯铭老师,她在我的课程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。
感谢我的计算机图象处理老师柯铭老师和面向对象C++老师张其文老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。
附录
********************************************************************
//文件名:
morph.cpp
//
//图像形态学变换API函数库:
//ErosionDIB()-图像腐蚀
//DilationDIB()-图像膨胀
//OpenDIB()-图像开运算
//CloseDIB()-图像闭运算
#include"
stdafx.h"
morph.h"
DIBAPI.h"
#include<
math.h>
direct.h>
/*************************************************************************
*
*函数名称:
*ErosiontionDIB()
*参数:
*LPSTRlpDIBBits-指向源DIB图像指针
*LONGlWidth-源图像宽度(象素数,必须是4的倍数)
*LONGlHeight-源图像高度(象素数)
*intnMode-腐蚀方式,0表示水平方向,1表示垂直方向,2表示自定义结构元素。
*intstructure[3][3]
-自定义的3×
3结构元素。
*返回值:
*BOOL-腐蚀成功返回TRUE,否则返回FALSE。
*说明:
*该函数用于对图像进行腐蚀运算。
结构元素为水平方向或垂直方向的三个点,中间点位于原点;
*或者由用户自己定义3×
3的结构元素。
*
*要求目标图像为只有0和255两个灰度值的灰度图像。
************************************************************************/
BOOLWINAPIErosionDIB(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,intnMode,intstructure[3][3])
{
//指向源图像的指针
LPSTRlpSrc;
//指向缓存图像的指针
LPSTRlpDst;
//指向缓存DIB图像的指针
LPSTRlpNewDIBBits;
HLOCALhNewDIBBits;
//循环变量
longi;
longj;
intn;
intm;
//像素值
unsignedcharpixel;
//暂时分配内存,以保存新图像
hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight);
if(hNewDIBBits==NULL)
{
//分配内存失败
returnFALSE;
}
//锁定内存
lpNewDIBBits=(char*)LocalLock(hNewDIBBits);
//初始化新分配的内存,设定初始值为255
lpDst=(char*)lpNewDIBBits;
memset(lpDst,(BYTE)255,lWidth*lHeight);
if(nMode==0)
//使用水平方向的结构元素进行腐蚀
for(j=0;
j<
lHeight;
j++)
{
for(i=1;
i<
lWidth-1;
i++)
{
//由于使用1×
3的结构元素,为防止越界,所以不处理最左边和最右边的两列像素
//指向源图像倒数第j行,第i个象素的指针
lpSrc=(char*)lpDIBBits+lWidth*j+i;
//指向目标图像倒数第j行,第i个象素的指针
lpDst=(char*)lpNewDIBBits+lWidth*j+i;
//取得当前指针处的像素值,注意要转换为unsignedchar型
pixel=(unsignedchar)*lpSrc;
//目标图像中含有0和255外的其它灰度值
if(pixel!
=255&
&
*lpSrc!
=0)
returnFALSE;
//目标图像中的当前点先赋成黑色
*lpDst=(unsignedchar)0;
//如果源图像中当前点自身或者左右有一个点不是黑色,
//则将目标图像中的当前点赋成白色
for(n=0;
n<
3;
n++)
{
pixel=*(lpSrc+n-1);
if(pixel==255)
{
*lpDst=(unsignedchar)255;
break;
}
}
}
}
elseif(nMode==1)
//使用垂直方向的结构元素进行腐蚀
for(j=1;
lHeight-1;
for(i=0;
lWidth;
3的结构元素,为防止越界,所以不处理最上边和最下边的两列像素
//如果源图像中当前点自身或者上下有一个点不是黑色,
pixel=*(lpSrc+(n-1)*lWidth);
else
//使用自定义的结构元素进行腐蚀
//由于使用3×
//和最上边和最下边的两列像素
//如果原图像中对应结构元素中为黑色的那些点中有一个不是黑色,
//注意在DIB图像中内容是上下倒置的
for(m=0;
m<
m++)
for(n=0;
n++)
if(structure[m][n]==-1)
continue;
pixel=*(lpSrc+((2-m)-1)*lWidth+(n-1));
if(pixel==255)
{
*lpDst=(unsignedchar)255;
break;
}
//复制腐蚀后的图像
memcpy(lpDIBBits,lpNewDIBBits,lWidth*lHeight);
//释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
//返回
returnTRUE;
}
*DilationDIB()
*intnMode-膨胀方式,0表示水平方向,1表示垂直方向,2表示自定义结构元素。
*BOOL-膨胀成功返回TRUE,否则返回FALSE。
*该函数用于对图像进行膨胀运算。
BOOLWINAPIDilationDIB(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,intnMode,intstructure[3][3])
//使用水平方向的结构元素进行膨胀
pixel!
//目标图像中的当前点先赋成白色
*lpDst=(unsignedchar)255;
//源图像中当前点自身或者左右只要有一个点是黑色,
//则将目标图像中的当前点赋成黑色
pixel=*(l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 分割 数学 形态学 图象处理 程序设计