图像分割和二值数学形态学图象处理程序设计.doc_第1页
图像分割和二值数学形态学图象处理程序设计.doc_第2页
图像分割和二值数学形态学图象处理程序设计.doc_第3页
图像分割和二值数学形态学图象处理程序设计.doc_第4页
图像分割和二值数学形态学图象处理程序设计.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实践教学实践教学 兰州理工大学兰州理工大学 计算机与通信学院 2009 年秋季学期 计算机图象处理计算机图象处理综合训练综合训练 题 目 图像分割和二值数学形态学图象处 理程序设计 专业班级 姓 名 学 号 0 指导教师 成 绩 1 目目 录录 摘 要 2 一 前言 3 二 算法分析与描述 4 2 1 基于阈值的图象分割 4 2 2 二值数学形态学图像处理腐蚀 4 3 1 分割详细设计说明 6 四 调试过程中出现的问题及相应解决办法 8 五 程序运行截图及其说明 9 六 简单操作手册 12 设计总结 14 参考资料 15 致谢 16 附录 17 2 摘摘 要要 用计算机进行数字图像处理的目的有两个 一是产生更适合人类视觉观察和识 别的图像 二是希望计算机能够自动进行识别和理解图像 无论是为了何种目 的 图像处理的要害一步是对包含有大量各式各样景物信息的图像进行分解 分解的最终结果就是图像被分成一些具有各种特征的最小成分 这些成分就称 为图像的基元 产生这些基元的过程就是图像分割的过程 图象灰度的阈值分 割方法和基于区域的分割方法是程序中主要使用的方法 程序中还包括自适应 区域分割和并行边界分割 在图像处理中主要用 VC 编写图像处理程序并调用 C 图像处理的部分内部函数进行处理 腐蚀处理的作用是将目标图形收缩 腐蚀处理可以表示成用结构元素对 图像进行探测 找出图像中可以放下该结构元素的区域 关键词 数字图象处理 阈值分割 数学形态学 分析 3 一 前言一 前言 在图像分析中 通常需要将所关心的目标从图像中提取出来 这种从图像 中将某个特定区域与其他部分进行分离并提取出来的处理 就是图像分割 因 为图像分析处理实际就是区分图像中的 前景目标 和 背景 所以通常又称 之为图像的二值化处理 图像分割在图像分析 图像识别 图像检测等方面占 有非常重要的地位 在图象处理中 二值数学形态学是一种经典的算法 在图象处理与分析技 术中 许多场合下对所拍摄的图象进行二值化处理 然后对分割出的目标区域 进行几何特征的测量 二值图象中的一种主要处理是对所提取的目标图形进行形态分析 二值图 像中的一种主要处理是对所提取的目标图形进行形态分析 腐蚀处理的作用是 将目标图形收缩 为了实现腐蚀 数学形态学提出了结构元素的概念 所谓结 构元素是指具有某种确定形状的基本结构元素 例如 一定大小的矩形 圆或 者菱形等 腐蚀处理可以表示成用结构元素对图像进行探测 找出图像中可以 放下该结构元素的区域 4 二 算法分析与描述二 算法分析与描述 2 1 基于阈值的图象分割 所谓阈值方法就是确定某个阈值 Th 根据图像中每个像素的灰度值大于或 小于该阈值 Th 来进行图像分割 阈值方法的数学模型如下 设原图像为 f x y 经过分割处理后的图像为 g x y g x y 为二值 图像 则有 0 1 yxg Thyxf Thyxf 2 2 二值数学形态学图像处理腐蚀二值数学形态学图像处理腐蚀 形态学运算是针对二值图象依据数学形态学 Mathematical Morphology 的 集合论方法发展起来的图象处理方法 数学形态学起源于岩相学对岩石结构的 定量描述工作 近年来在数字图象处理和机器视觉领域中得到了广泛的应用 形成了一种独特的数字图象分析方法和理论 通常形态学图象处理表现为一种邻域运算形式 一种特殊定义的邻域称之 为 结构元素 Structure Element 在每个象素位置上它与二值图象对应 的区域进行特定的逻辑运算 逻辑运算的结果为输出图象的相应象素 形态学 运算的效果取决于结构元素的大小 内容以及逻辑运算的性质 给定二值图象 I x y 和作为结构元素的二值模板 T i j 则典型的腐蚀运 算可表示成 int m nSupp int m nDWTCurDepth 类的行为说明 int InitDocVariable int FreeDocVariable virtual void AssertValid const virtual void Dump CDumpContext BOOL DIBDWTStep CDib pDib int nInv C06500131panzhangrongDoc GetDocument afx msg void OnEdgeRoberts afx msg void OnEdgeSobel afx msg void OnEdgePrewitt afx msg void OnEdgeLaplace afx msg void OnEdgeCanny afx msg void OnEdgeTrack afx msg void OnRegionGrow 3 23 2 腐蚀类的设计说明腐蚀类的设计说明 1 程序运行中用到的运算 VErosion 图象进行垂直方向上的腐蚀运算 HErosion 图象进行水平方向上的腐蚀运算 VHErosion 图象进行全方向腐蚀 7 2 主要函数说明 1 函数名称 VErosion 参数 HDIB hDIB 待处理的 DIB 返回值 void 无返回值 说明 该函数对图象进行垂直方向上的腐蚀 2 函数名称 HErosion 参数 HDIB hDIB 待处理的 DIB 返回值 void 无返回值 说明 该函数对图象进行水平方向上的腐蚀 3 函数名称 VHErosion 参数 HDIB hDIB 待处理的 DIB 返回值 void 无返回值 说明 该函数对图象进行全方向腐蚀 3 程序流程图如下 头文 件打 开进 入函 数 中 Verosion 垂直腐蚀 HErosion 水平腐蚀 VHErosion 全方向腐 蚀 图 3 1 流程图 8 四 调试过程中出现的问题及相应解决办法四 调试过程中出现的问题及相应解决办法 1 函数在编译时出错 应为没有加入必须有的头文件 include math h 有 math h 头文件才能对出现的数学计算进行正确处理 2 安装的创天中文 VC 无法打开头文件 afsrex h 3 所被用来做二值数学形态学图象处理的图像必须是 24 位色位图 若不 是则需将其先转化 图 4 1 显示出错的界面 9 五 程序运行截图及其说明五 程序运行截图及其说明 5 1 阈值分割的截图 对图片草原进行运算 图片为 24 位 BMP 格式 256 256 1 原图 2 固定阈值分割 10 2 腐蚀的截图 对图片树林进行运算 图片为 24 位 BMP 格式 256 256 1 原图 2 水平腐蚀 11 3 垂直腐蚀 4 全方位腐蚀 12 六 简单操作手册六 简单操作手册 运行程序出现界面 13 图 6 1 程序界面 点击文件 再点击打开 打开原图 如下图 6 2 所示 14 设计总结设计总结 这次的图象处理综合训练的工作量比较大 我投入了很多的时间和精力才 完成了此次设计 不过这些付出都是值得的 因为我收获了更多 首先 在开 发的过程中 我对操作系统及 VC 的功能实现 特别是图像处理中图像分割 和二值形态学的图像处理有了很深的了解 最后 在图像处理综合训练的过程 中 在很大程度上磨练了我的意志 同时锻炼了我个人的编程思维 15 参考资料参考资料 1 朱虹 计算机图象处理基础 M 科学出版社 2005 2 R C Gonzalez R E Woods 著 阮秋琦 阮宇智等译 计算机图象处理 第 2 版 北京 电子工业出版社 2003 3 K R Castleman 计算机图象处理 北京 电子工业出版社 2002 4 章毓晋 图像处理与分析 图像工程 上册 清华大学 2001 5 何斌等编著 Visual C 计算机图象处理 人民邮电出版社 2002 6 张宏林编著 Visual C 计算机图象模式识别技术及工程实践 人民邮电出 版社 2003 7 黄维通 Visual C 面向对象与可视化程序设计 清华大学出版社 2003 8 R C Gonzalez R E Woods S L Eddins 著 阮秋琦 阮宇智等译 计算机 图象处理 MATLAB 版 北京 电子工业出版社 2005 9 杨枝灵等编著 Visual C 数字图像获取 处理及实践应用 人民邮电出版 社 2003 10 何斌等编著 Visual C 数字图像处理 第二版 人民邮电出版社 2003 16 致谢致谢 首先感谢我的指导老师柯铭老师 她在我的课程中提出了指导性的方案和 架构 并指引我阅读相关的资料和书籍 使我在不熟悉的领域中仍能迅速掌握 新的技术 感谢我的计算机图象处理老师柯铭老师和面向对象 C 老师张其文老师在 以往的基础课学习中为我打下良好的基础 这是我这次课程设计能够顺利完成 的前提 17 附录附录 文件名 morph cpp 图像形态学变换 API 函数库 ErosionDIB 图像腐蚀 DilationDIB 图像膨胀 OpenDIB 图像开运算 CloseDIB 图像闭运算 include stdafx h include morph h include DIBAPI h include include 函数名称 ErosiontionDIB 参数 18 LPSTR lpDIBBits 指向源 DIB 图像指针 LONG lWidth 源图像宽度 象素数 必须是 4 的倍数 LONG lHeight 源图像高度 象素数 int nMode 腐蚀方式 0 表示水平方向 1 表示垂直方向 2 表示自定义结构元素 int structure 3 3 自定义的 3 3 结构元素 返回值 BOOL 腐蚀成功返回 TRUE 否则返回 FALSE 说明 该函数用于对图像进行腐蚀运算 结构元素为水平方向或垂直方向的三 个点 中间点位于原点 或者由用户自己定义 3 3 的结构元素 要求目标图像为只有 0 和 255 两个灰度值的灰度图像 BOOL WINAPI ErosionDIB LPSTR lpDIBBits LONG lWidth LONG lHeight int nMode int structure 3 3 指向源图像的指针 LPSTRlpSrc 指向缓存图像的指针 19 LPSTRlpDst 指向缓存 DIB 图像的指针 LPSTRlpNewDIBBits HLOCAL hNewDIBBits 循环变量 long i long j int n int m 像素值 unsigned char pixel 暂时分配内存 以保存新图像 hNewDIBBits LocalAlloc LHND lWidth lHeight if hNewDIBBits NULL 分配内存失败 return FALSE 锁定内存 lpNewDIBBits char LocalLock hNewDIBBits 初始化新分配的内存 设定初始值为 255 lpDst char lpNewDIBBits 20 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 取得当前指针处的像素值 注意要转换为 unsigned char 型 pixel unsigned char lpSrc 目标图像中含有 0 和 255 外的其它灰度值 if pixel 255 目标图像中的当前点先赋成黑色 21 lpDst unsigned char 0 如果源图像中当前点自身或者左右有一个点不是黑色 则将目标图像中的当前点赋成白色 for n 0 n 3 n pixel lpSrc n 1 if pixel 255 lpDst unsigned char 255 break else if nMode 1 使用垂直方向的结构元素进行腐蚀 for j 1 j lHeight 1 j for i 0 i lWidth i 由于使用 1 3 的结构元素 为防止越界 所以不处理最 上边和最下边的两列像素 指向源图像倒数第 j 行 第 i 个象素的指针 22 lpSrc char lpDIBBits lWidth j i 指向目标图像倒数第 j 行 第 i 个象素的指针 lpDst char lpNewDIBBits lWidth j i 取得当前指针处的像素值 注意要转换为 unsigned char 型 pixel unsigned char lpSrc 目标图像中含有 0 和 255 外的其它灰度值 if pixel 255 目标图像中的当前点先赋成黑色 lpDst unsigned char 0 如果源图像中当前点自身或者上下有一个点不是黑色 则将目标图像中的当前点赋成白色 for n 0 n 3 n pixel lpSrc n 1 lWidth if pixel 255 lpDst unsigned char 255 break 23 else 使用自定义的结构元素进行腐蚀 for j 1 j lHeight 1 j for i 0 i lWidth i 由于使用 3 3 的结构元素 为防止越界 所以不处理最 左边和最右边的两列像素 和最上边和最下边的两列像素 指向源图像倒数第 j 行 第 i 个象素的指针 lpSrc char lpDIBBits lWidth j i 指向目标图像倒数第 j 行 第 i 个象素的指针 lpDst char lpNewDIBBits lWidth j i 取得当前指针处的像素值 注意要转换为 unsigned char 型 pixel unsigned char lpSrc 目标图像中含有 0 和 255 外的其它灰度值 if pixel 255 24 目标图像中的当前点先赋成黑色 lpDst unsigned char 0 如果原图像中对应结构元素中为黑色的那些点中有一个 不是黑色 则将目标图像中的当前点赋成白色 注意在 DIB 图像中内容是上下倒置的 for m 0 m 3 m for n 0 n 3 n if structure m n 1 continue pixel lpSrc 2 m 1 lWidth n 1 if pixel 255 lpDst unsigned char 255 break 复制腐蚀后的图像 memcpy lpDIBBits lpNewDIBBits lWidth lHeight 25 释放内存 LocalUnlock hNewDIBBits LocalFree hNewDIBBits 返回 return TRUE 函数名称 DilationDIB 参数 LPSTR lpDIBBits 指向源 DIB 图像指针 LONG lWidth 源图像宽度 象素数 必须是 4 的倍数 LONG lHeight 源图像高度 象素数 int nMode 膨胀方式 0 表示水平方向 1 表示垂直方向 2 表示自定义结构元素 int structure 3 3 自定义的 3 3 结构元素 返回值 BOOL 膨胀成功返回 TRUE 否则返回 FALSE 26 说明 该函数用于对图像进行膨胀运算 结构元素为水平方向或垂直方向的三 个点 中间点位于原点 或者由用户自己定义 3 3 的结构元素 要求目标图像为只有 0 和 255 两个灰度值的灰度图像 BOOL WINAPI DilationDIB LPSTR lpDIBBits LONG lWidth LONG lHeight int nMode int structure 3 3 指向源图像的指针 LPSTRlpSrc 指向缓存图像的指针 LPSTRlpDst 指向缓存 DIB 图像的指针 LPSTRlpNewDIBBits HLOCAL hNewDIBBits 循环变量 long i long j int n 27 int m 像素值 unsigned char pixel 暂时分配内存 以保存新图像 hNewDIBBits LocalAlloc LHND lWidth lHeight if hNewDIBBits NULL 分配内存失败 return FALSE 锁定内存 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 28 由于使用 1 3 的结构元素 为防止越界 所以不处理最 左边和最右边的两列像素 指向源图像倒数第 j 行 第 i 个象素的指针 lpSrc char lpDIBBits lWidth j i 指向目标图像倒数第 j 行 第 i 个象素的指针 lpDst char lpNewDIBBits lWidth j i 取得当前指针处的像素值 注意要转换为 unsigned char 型 pixel unsigned char lpSrc 目标图像中含有 0 和 255 外的其它灰度值 if pixel 255 目标图像中的当前点先赋成白色 lpDst unsigned char 255 源图像中当前点自身或者左右只要有一个点是黑色 则将目标图像中的当前点赋成黑色 for n 0 n 3 n pixel lpSrc n 1 if pixel 0 lpDst unsigned char 0 29 break else if nMode 1 使用垂直方向的结构元素进行膨胀 for j 1 j lHeight 1 j for i 0 i lWidth i 由于使用 1 3 的结构元素 为防止越界 所以不处理最 上边和最下边的两列像素 指向源图像倒数第 j 行 第 i 个象素的指针 lpSrc char lpDIBBits lWidth j i 指向目标图像倒数第 j 行 第 i 个象素的指针 lpDst char lpNewDIBBits lWidth j i 取得当前指针处的像素值 注意要转换为 unsigned char 型 pixel unsigned char lpSrc 30 目标图像中含有 0 和 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论