第7章 图像分割及测量ppt课件_第1页
第7章 图像分割及测量ppt课件_第2页
第7章 图像分割及测量ppt课件_第3页
第7章 图像分割及测量ppt课件_第4页
第7章 图像分割及测量ppt课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

第7章图像分割及测量 本章要点 图像阈值分割 目标物体的轮廓提取 模板匹配 图像的测量 7 1概述 数字图像处理的目的之一是图像识别 图像分割与测量是图像识别工作的基础 图像分割将图像分为一些有意义的区域 然后可以对这些区域进行描述 相当于提取出某些目标区域图像的特征 判断图像中是否有感兴趣的目标 图像分割的基础是像素间的相似性和跳变性 边缘检测能较成功的检测出图像真正的边缘 在边缘检测之后 找出目标物体的轮廓 进行目标物体的分析 识别 测量等 这些内容在数字图像处理应用中 如跟踪 制导等方面扮演重要角色 有着广泛的用途 7 2图像阈值分割 阈值处理是一种区域分割技术 将灰度根据主观愿望分成两个或多个等间隔或不等间隔灰度区间 它主要是利用图像中要提取的目标物体和背景在灰度上的差异 选择一个合适的阈值 通过判断图像中的每一个像素点的特征属性是否满足阈值的要求来确定图像中该像素点属于目标区还是应该属于背景区域 从而产生二值图像 本节介绍选择合适的阈值方法有 直方图门限选择 半阈值选择图像分割 迭代阈值图像分割 7 2 1直方图门限选择 1 理论基础阈值T可通过分析边缘检测输出的直方图来确定 假设 一幅图像只有物体和背景两部分组成 其灰度级直方图成明显的双峰值 如图7 1 图7 1双峰灰度级直方图 在此情况下 选取双峰间的谷底处的灰度值T作为阈值 即可将物体和背景很好地分割开 阈值分割法可用数学表达式来描述 设图像为f i j 其灰度级范围为 z1 z2 设T为阈值 是z1和z2内任一值 可得一幅二值图像 其数学表达式为 255如果f i j Tf i j 7 1 0如果f i j T或者 也可以0如果f i j Tf i j 7 2 255如果f i j T 假如 其灰度级直方图能呈现多个明显的峰值 比如有三个峰值 可取两个峰谷处的灰度值T1 T2作为阈值 同样 可将阈值化后的图像变成二值化图像 0 图7 2多峰值灰度级直方图 其数学表达式为 0如果T1 f i j T2f i j 7 3 255其它或者 同样也可以255如果T1 f i j T2f i j 7 4 0其它 2 实现步骤 1 获得原图像的首地址 及图像的宽和高 2 开辟一块内存空间 并初始化为255 3 进行图像灰度统计 显示灰度直方图 4 通过对话框选取一个峰谷作为阈值 5 像素灰度值与阈值之差小于30 将像素置为0 否则置为255 6 将结果复制到原图像数据区 3 编程代码对图像进行灰度直方图统计 voidBingXingBianJieDib Zhifangtu float tongji 对图像进行阈值分割 voidBingXingBianJieDib Yuzhifenge intYuzhi 见光盘程序代码 4 效果对比图 a 根据直方图选择阈值 b 原图 c 二值化效果图 7 2 2半阈值选择分割 1 理论基础上述方法 不论图像的直方图具有双峰还是多峰值 经过阈值化后均将原始灰度级多值图像变成二值图像 假如希望阈值后的图像只把图像的背景表示成二值图像 即背景不是最白 用1表示 就是最黑 用0表示 而图像中的物体仍为多值图像 此时 可采用半阈值技术 把物体从背景中分离出来 半阈值化后的图像可用数学表达式表示为 f i j 如果f i j Tf i j 7 6 0或者255如果f i j T或者f i j 如果f i j Tf i j 7 7 0或者255其它 2 实现步骤 1 获得原图像的首地址 及图像的宽和高 2 开辟一块内存空间 并初始化为255 3 进行图像灰度统计 显示灰度直方图 请看Zhifangtu float tongji 函数 4 选取一个峰谷作为阈值 5 像素灰度值与阈值之差小于30 将像素置为0 否则保持灰度值不变 6 将结果复制到原图像数据区 3 编程代码 for j 0 j height j for i 0 i wide i lpSrc p data wide j i lpDst temp wide j i if lpSrc Yuzhi 30 lpDst lpSrc 4 效果对比图 a 根据直方图选择阈值 b 半阈值选择图像分割效果图 7 2 3迭代阈值分割 1 理论基础迭代的方法产生阈值 可以通过程序自动计算出比较合适的分割阈值 其计算方法是这样的 1 选择阈值T 通常可以选择图像的平均灰度值来作为初始阈值 2 通过初始阈值T 把图像的平均灰度值分成两组R1和R2 3 计算着两组平均灰度值 1和 2 4 重新选择阈值T 新的T定义为 T 1 2 2 循环做第二步到第四步 一直到两组的平均灰度值 1和 2不在发生改变 那么我们就获得了所需要的阈值 2 实现步骤 1 获得原图像的首地址 及图像的高和宽 2 进行直方图统计 请看Zhifangtu float tongji 函数 3 设定初始阈值T 127 4 分别计算图像中小于T和大于T的两组平均灰度值 5 迭代计算阈值 直至两个阈值相等 7 根据计算出的阈值 对图像进行二值化处理 3 编程代码对图像进行迭代阈值分割 voidBingXingBianJieDib Diedaifazhi int tongji 见光盘程序代码 4 效果对比图图7 5迭代阈值图像分割效果图 7 3目标物体的轮廓提取 轮廓提取法 边界跟踪法 区域增长法 区域分裂合并法 7 3 1轮廓提取法 1 理论基础图像边缘是图像局部特性不连续性 灰度突变 颜色突变等 的反映 它标志着一个区域的终结和另一个区域的开始 二值图像的轮廓提取的原理非常简单 就是掏空内部点 如果原图中有一点为黑 且它的8个相邻点皆为黑 则将该点删除 对于非二值图像 要先进行二值化处理 2 实现步骤 1 获取原图像像素的首地址 及图像的高和宽 2 开辟一块内存缓冲区 将原图像素保存在内存中 3 将像素点的8邻域像素读入数组中 如果每一个邻域像素的灰度值和中心点的灰度值相差小于10 则认为邻域像素和中心点相同 如果8个邻域像素都和中心点相同 在内存缓冲区中将该像素点置白 否则保持不变 4 重复执行 3 对每一个像素进行处理 5 将内存中的数据复制到原图像中 3 编程代码对图像进行轮廓提取 voidBingXingBianJieDib Lunkuotiqu 见光盘程序代码 4 效果对比图 a 原图 b 轮廓提取效果图 7 3 2边界跟踪法 1 理论基础边界跟踪的基本方法是 先根据某些严格的 探测准则 找出目标物体轮廓上的像素 再根据这些像素的某些特征用一定的 跟踪准则 找出目标物体上的其他像素 一般的跟踪准则是 边缘跟踪从图像左上角开始逐像点扫描 当遇到边缘点时则开始顺序跟踪 直至跟踪的后续点回到起始点 对于闭合线 或其后续点再没有新的后续点 对于非闭合线 为止 如果为非闭合线 则跟踪一侧后需从起始点开始朝相反的方向跟踪到另一尾点 如果不止一个后续点 则按上述连接准则选择加权平均最大的点为后续点 另一次要的后续点作为新的边缘跟踪起点另行跟踪 一条线跟踪完后 接着扫描下一个未跟踪点 直至图像内的所有边缘都跟踪完毕 a 中心像素跟踪的8个方向编号及偏移量 b 边界跟踪示意图 2 实现步骤 1 获得原图像的首地址 及图像的高和宽 2 开辟一块内存缓冲区 初始化为255 3 将图像进行二值化处理 4 跟踪边界点 找到1个边界点 就将内存缓冲区中该点相应位置置0 5 按照跟踪准则 重复执行 4 直到回到初始点 6 将内存缓冲区的内容复制到原图像中 3 编程代码 对图像进行轮廓跟踪 voidBingXingBianJieDib Lunkuogenzong 见光盘程序代码 4 效果对比图 a 原图 b 外边界跟踪效果图 7 3 3区域增长法 1 理论基础 算法的主要过程是 依次用图像的每一个像素的灰度值和标准阈值相减 判断结果是否小于标准差 是则将该点和种子点合并 不是则保持像素点的灰度值不变 这样处理后的图像就是用区域分割法处理后的边缘分割图像 图7 9区域增长法示意图 2 实现步骤 1 获取原图像的像素的首地址 以及图像的高和宽 2 依次用图像的每一个像素的灰度值减去标准阈值 判断结果的绝对值是否小于标准差 标准差为10 如果小于则将标准阈值赋给该像素点 否则灰度值保持不变 3 调用刷新函数显示效果图 3 编程代码 unsignedcharzhongzi p data point y wide point x 计算种子点一的灰度值 对各像素进行灰度转换for j 0 j height j for i 0 i wide i 获取各颜色分量unsignedchartemp unsignedchar p data wide j i if abs temp zhongzi 10 当前点同种子一灰度值比较接近 将种子一的颜色赋给当前像素 unsignedchar p data wide j i temp else unsignedchar p data wide j i 255 4 效果对比图 a 选择生长点 b 按右键点击黑处效果图 7 3 4区域分裂合并法 区域分裂合并方法利用了图像数据的金字塔或四叉树数据结构的层次概念 将图像划分成一组任意不相交的初始区域 即可以从图像的这种金字塔或四叉树数据结构的任一中间层开始 根据给定的均匀性检测准则进行分裂和合并这些区域 逐步改善区域划分的性能 直至最后将图像分成数量最少的均匀区域为止 区域分裂合并方法算法步骤是 1 确定均匀性测试准则T 将原始图像构造成四叉树数据结构 2 将图像四叉树结构中的某一中间层作为初始的区域划分 如果对任何区域R 有T R false 则把区域分裂成4个子区 若任一1 4子区Ri有 T Ri false 则再将该子区一分为四四个区域 如果对任一恰当的四个子区有T R1 R2 R3 R4 true 则再把四个子区合并成一个区 重复上述操作 直到不可再分或再合为止 3 若有不同大小的两个相邻区域Ri和Rj 满足T Ri Rj true 则合并这两个区域 举例说明 a 对原图进行第一次操作 b 第二次操作 c 最终结果 7 4图像的测量 几个基本概念 1 邻域 2 连通4点邻连通8点连通 与像素 x y 对应的点集合 x p y q p q 是一对有意义的整数 称之为像素 x y 的邻域 离散图像处理中常取4邻域和8邻域 3 连通成份 4 标记 二值图像中互相连通的0 像素集或1 像素集称之为连通成份 分割后的一帧图像内可能存在多个连通成份 每个非连通成份都对应一个目标图像区 给各目标图像区分配相应标号的工作称之为标记 本小节是以存在着一定面积黑区域的二值图像为对像的处理程序集 在二值图像中 相互连接的黑像素的集合成为一个黑区域 对黑区域处理的测量主要介绍 二值图形的区域标志 二值图形的小区域消除 二值图形封闭域大小的计算 二值图形的边界线跟踪 投影量的计算 7 4 1二值图像区域标记 1 理论基础在二值图像f中 相互联结的黑像素的集合成为一个 黑 区域 本程序通过对图像f内每个区域进行标记操作 标号 求得区域的数目 由于处理前的f是二值的 像素要么为0 黑 要么为255 白 所以处理后每个像素的值即为其所处理区域的区域标号 1 2 3 连接性c 4 或 8 由用户决定 2 实现步骤 1 读入原图数据 存放在缓冲区内 包括原图各点像素值 原图宽度 高度等 2 根据输入的阈值进行二值化 原像素值大于阈值的像素点置255 否则置0 3 检测缓冲区 从左到右 从上倒下 依次检测每个像素 如果发现某像素点像素值为0 则依次检测该点的右上 正上 左上及左前点共四个点的像素值 根据前面介绍的8个准则进行连通性的判断 并标识物体 将物体的像素值改为标号 4 依次逐行检测至扫描结束 3 编程代码 图像进行标记 划分成不同的连通区域voidJisuanProcessDib biaoji 见光盘程序代码 4 效果图 a 原图 b 对物体加标记图 7 4 2二值图像的区域面积测量 1 理论基础在二值图像f中 相互连接的黑像素的集合成为一个 黑 区域 在上一节的基础上 通过对图像f内每个像素进行标记操作 将物体的像素值改为标号 求各种标号的总和 即求得不同区域的面积数目 2 实现步骤 1 调用标记统计函数 对图像进行标记 划分成不同的连通区域 2 循环取得各点像素值 像素值就是标号 3 根据不同的标号 加到对应的数组 4 弹出对话框 输出各个连通区域的面积 像素个数 3 编程代码 biaoji 调用标记函数intfg 255 0 定义一个数组memset fg 0 255 初始化赋值都为0inty sign 0 intm Area 0 定义一个面积for inti 1 i x sign i if flag i 0 if fg y sign 0 fg y sign flag i y sign m Area flag i SquareDlgdlg 输出对话框dlg m number y sign 输出连通区域个数dlg m squareALL m Area 输出连通区域的总积CStringss 20 在对话框里输出每个连通区的面积 区域像素个数 for i 0 i y sign i ss i Format 连通区 3d该区面积 10 0d i 1 fg i dlg m ShuChu ss i dlg DoModal 4 效果图面积测量效果图 7 4 3二值图像的周长测量 1 理论基础在二值图形f中 相互连接的黑像素的集合成为一个 黑 区域 在上一节二值图像区域标记的基础上 通过对图像f内每个像素进行标记操作 将物体的像素值改为标号 再采用边界跟踪法 跟踪各封闭区域边界线 轮廓线 的每个黑像素的标号 记录二值图像物体边界的坐标值序列 边界线跟踪采用左手和搜索法 它是将白区域视为平面 黑区域视为建筑物 然后一边让左手接触建筑物的壁面一边前进 最后返回出发点的一种跟踪方法 输出黑区域边界的环数 2 实现步骤 1 调用biaoji 函数 对图像进行标记 划分成不同的连通区域 2 根据不同的像素值 即不同的连通区 循环取得各点像素值的标号 搜索出一个发点 利用7 3 2节介绍的边界跟踪法 采用Lunkuogenzong 函数 找到出发点后 记录其坐标 再跟踪下一像素 保留循环得到的边界点 其余都置255 白点 3 根据不同的像素值 即不同的连通区 依次执行第2步 4 把缓冲区的数据返回到原数据区 5 调整连通边界区 计算每个连通边界区的周长 像素个数 6 弹出对话框 输出各个边界连通区域的像素个数 3 编程代码 对每个连通区进行边界跟踪 提取边界 输出周长 voidJisuanProcessDib Borderline 见光盘程序代码 4 效果图周长计算效果图 综合二值图像物体的标识及测量图 a 原图 b 对不同区域体标识图 c 二值图像的区域面积测量图 d 二值图像的区域周长测量图 7 4 4二值图像的小区域消除 1 理论基础在二值图形f中 相互连接的黑像素的集合成为一个 黑 区域 在二值图形区域标记的基础上 通过对图形f内每个标记操作 标号 的区域进行计算 求得总区域的数目 并求得每个区域的像素个数 当二值图像f的某区域面积 像素数 在阈值以下时 则消去该区域 全部置为255 白 由此得到新图形 2 实现步骤 1 调用标记统计函数 对图像进行标记 划分成不同的连通区域 2 循环取得各点像素值 3 根据不同的像素值 依此为数标 加到对应的数组 4 依次判断每个连通区的像素个数 即对应的数组 若大于阈值则该区域保留 否则该区域全部消除 置白 3 编程代码 biaoji 调用标记函数for inti 1 i x sign i if flag i m value 判断连通区的面积 像素个数 是否消除 for intm 1 m height 1 m for intn 1 n wide 1 n if p temp height m 1 wide n i p data height m 1 wide n 255 4 效果图 a 输入欲消除物体的面积 b 消除面积小于2000的效果图 7 4 5投影量的计算 1 水平投影 1 实现步骤 将图像二值化 使物体为黑 背景为白 循环各行 依次判断每一列的像素值是否为黑 统计该行所有黑像素的个数 设该行共有M个黑像素 则把该行从第一列到第M列置为黑 显示该图 2 核心代码 对图像进行二值化for j 0 j128 p data 255 else

温馨提示

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

评论

0/150

提交评论