本文主要对图像分割一般方法的总结,其包括阈值分割,形态学分割及其区域增长.
图像分割概述
分割的目的是把图像空间分成一些有意义的区域,是实现图像自动识别与理解的必不可少的过程,是计算机视觉的中间层次.
假如集合R代表整个图像区域,对R分割为n个子区域为r1,r2…rn,则图像分割需要满足以下五个条件:
- 所有子区域的并集是R,也就是说分割是针对每一个像素
- 任何被分割的两个子区域没有交集
- 属于同一个区域的像素应该具有相同的特性,区域边界是明确的.这个需要定义相应的评价标准.
- 属于不同区域中的像素应该具有不同的特性
- 要求被分割的子区域内的像素应该是连通的.
那么要求分割准则
- 分割准则应适用于所有区域和像素
- 分割准则应能确定各区域像素有代表的特性
分割算法的基于灰度值的两个基本特性:
- 不连续性.不同区域之间没有共性的.
- 相似性.被分割的子区域是相似性的
图形分割的基本策略
- 从简到难,逐级分割
- 控制背景环境,降低分割难度
- 把焦点放在增强感兴趣对象,减少不相干部分的干扰上.
阈值分割法
二值化的分割方法
利用直方图来确定阈值
- 利用直方图的双峰性,选择双峰之间作为阈值
- 如果直方图是多峰的,可以选择多个阈值
- 取直方图谷底的灰度值作为阈值(双峰一谷)
最优阈值(最小错误概率阈值)
在某种评价的标准下寻优,找出相应意义下的最优阈值. 其中一个评价标准:错分的概率最小.
- 1).给定目标物和背景的概率及其灰度分布概率密度函数
- 2).给定一个阈值t下,求每类的分割错误概率
- 3).求此阈值下总分割错误概率e(t)
- 4).由总分割错误概率e(t)的极少值求解最优值T
全局阈值处理
- 1).为全局阈值T选择一个初始值
- 2).以阈值T 对图像进行分割产生两组像素,G1 和 G2
- 3).对两组像素分别计算平均灰度值(均值):m1 和m2
- 4).计算一个新的阈值 T = (m1+m2)/2
- 5).重复步骤2和4直到迭代中的T值间的差小于一个预定义的误差系数为止.
最大类间方差阈值(大津阈值分割OTSU)
- 该方法自动寻找阈值,对图像进行划分,将目标和背景区分开来.
- 主要原理是 把直方图在某一个阈值分成两组,当被分成的两组间方差为最大时,决定最终阈值
- 算法步骤如下:
- 1).假设一幅图像有L个灰度级[1,2,…,L]。灰度级为i的像素点的个数为ni,像素总个数为N
- 2).用灰度级k将图像分成两组像素 C0 和 C1,C0灰度级为[1,…,k],C1灰度级为[k+1,…,L].
- 3).分别计算两组产生的概率和灰度平均值
并且全部采样的平均值可以表述为:
- 4).用下式计算两组总的方差
- 5).所以可以求出k就是阈值
p 参数法阈值分割算法
p就是已经知道像素点的比值和个数等先验知识,从来用来指导阈值选择. 比如高速路上的摄像头,比如目标车的像素比整个图像的比值.
- 计算原图的灰度直方图
- 输入目标对象所占画面的比例p
- 尝试性地给定一个阈值(在一个灰度级上随机选择即可)
- 计算在此阈值下目标物体的像素点数n
- 假如图像的大小为MXN, 判断n/(NM)是否接近P,并设x = n/(NM)-p
- 如果是,则该阈值时我们想要的
- 如果不是,新阈值=老阈值+delta,x小于0,则delta大于零,反之小于零.
边缘分割
边缘分割原理
通过寻找图像中不同区域的边界,从而实现图像分割,它是基于边界的一大类图像分割方法.一般由如下步骤:
- 输入一张图像
- 找出边缘点;采用孤立点检测模板或微分算子进行检测。具体思路如下:
- 一般常用一阶微分和二阶微分方法来检测边缘点:在一阶微分图中极大值或极小值处是边缘(如从黑到白);在二阶微分图中极大值和极小值之间的过 0 点被认为是边缘;
- 边界闭合
- 利用相似性进行闭合处理(难点:如何评价边缘相似性)
- 直接采用Hough变换
- 曲线拟合
- 最后实现分割
边缘检测
利用微分和差分来做,主要参见另一篇总结《图像增强》和《图像边缘检测》
区域分割法
区域生长
- 基本思想:
- 先确定分成的区域个数和特征
- 再分别为每个区域找一个具有代表性的种子,以种子为聚类中心不断地把图像中与之特性相同的相邻像素合并该区域中,直到不能合并为止
- 最后形成特征不同的各个区域
- 算法逻辑
- 确定相似性条件
- 找出区域的种子
- 不断的将相邻相似像素并入种子集合中,并判断是否生长完成(这里的停止条件是什么,需要设计,比如像素点的面积或像素面积)
- 如果满足 区域生长完成
分裂合并
-
基本思想: 把整幅图像开始,不断的逐级分裂,同时也把特性相同且相邻的区域合并,直到不能再分为止,最后得到各个子区域.
- 分裂和合并分开的基本思想–常用到的数据结构.
- 首先把一副图像分成四个区域,然后将子区域进行再次分,直到每一个区域为单像素为止。该常用到四叉树
- 遍历每一个子区域,将其和相邻的区域特性相同的合并为一个区域
- 分裂合并一起用的基本思路
- 首先把一副图像分成四个区域,然后对子区域进行判断是否具有相似性,如果相似该子区域不在分裂,并考察该子区域与之相邻的子区域进行比较,看是否具有相似性,如果有则将其合并,并不在分割。
- 将不具有相似性的子区域再次分裂,重复上一步。
- 其中 合并时 优先考虑同一个父节点下的4个区域,之后再扩展到其他父节点下同层次的区域.
hough 变换
- 基本思想:
把原图像空间的问题转换到其他的对偶空间去求解,并在对偶空间变得相对简单.
检测边缘线的基本原理
- 基本原理
- 图像空间为(x,y),一条直线可以表示为$ y=px+q $
- 参数空间(p,q),直线可以表示为$ q = y-px $
- 这两个空间是对偶的,在图像空间中的一个点,则在参数空间中则对应以条线.
- 假如在图像空间中有两点(x1,y1),(x2,y2),则在参数空间对应两条相交的线,且交点(p,q)就是原来方程的斜率和截距。
- 则两个空间的关系为:
图像空间 对偶 参数空间 纵坐标y 对偶 截距q x 对偶 斜率p 点 对偶 直线 共线的两点的直线斜率 对偶 线的交点 - 算法逻辑:
- 在图像空间中,利用其它的边缘检测的点找出一部分直线上的点,估计出斜率p和截距q的范围,并将p和q离散化(在参数空间就是将水平和竖直轴等分小格子), 建立一个mxn的累计数组A(p,q),用于记录图像空间中的点落在(pj,qk)的个数.
- 对于任意一个图像空间点(xi,yi),让p遍历[p1,p2,pm],对于任意一点pj,按照参数空间的直线参数方程求出对应的qk,对将数组元素A[j,k]加1;
- 假如图像中有t条直线,就在数组a中找出前t个最大值得 元素,其值(pj,qk)就是图像空间中直线的斜率和截距
- 存在的问题 当直线垂直时,斜率为无穷大时候,斜截式方程就很难表达对偶问题了 解决方法可以采用极坐标的形式
hough 变换也可以用于其他形状的检测
如圆形,椭圆及其其他曲线的检测.
形态学
- 主要是为了获取物体拓扑和结构信息,通过物体和结构元素相互作用,得到物体的形态结构.
- 主要思想:就是用结构元素去原图像中去探测或分析 是否具备结构元素的对应的形状,从而达到对图像分析和识别的目的,如下图所以,该中心点用结构元素探测后,根据一定的逻辑判断中心元素的输出.
- 图像分割后常常存在以下问题
- 提取目标中存在伪目标
- 多目标存在粘连或者断裂
- 多个目标形态不同
- 利用形态学可以帮助解决上述问题,如下图所示形态学的应用
膨胀
- 学院派定义
- 我的理解:就是将结构模板中心和原图像中的像素点进行扫略,如果结构元素与图像中元素有相交,则该像素点保留. 如下图实例
腐蚀
开运算
闭运算
Reference
- A threshold selection method from gray-level histogram