图像分割—基于边界的图像分割

边界对图像来说是至关重要的信息,人可以仅通过图像边缘、轮廓就能对图像整体产生较完整的认识,例如漫画、简笔画等待。基于边界的图像分割技术是基于灰度不连续性进行的分割方法,其基础就是边缘检测

边缘检测

利用梯度、差分、拉普拉斯算子及高通滤波等处理方法进行图像锐化,增强图像边缘,再进行一次阈值化处理,便可以将边缘增强的方法用于边缘检测

在这里插入图片描述

部分常用的边缘检测算子处理效果展示
  1. 梯度算子 f = [ G x G y ] = [ F x F y ] \nabla f=\begin{bmatrix} G_x \\ G_y \\ \end{bmatrix}=\begin{bmatrix} \frac{\partial F}{\partial x} \\ \\ \frac{\partial F}{\partial y} \\ \end{bmatrix}
  2. Roberts算子 [ 1 0 0 1 ] [ 0 1 1 0 ] \begin{bmatrix} 1 & 0 \\ 0 & -1 \\ \end{bmatrix}\begin{bmatrix} 0 & 1 \\ -1 & 0 \\ \end{bmatrix}
  3. Prewitt算子 [ 1 0 1 1 0 1 1 0 1 ] [ 1 1 1 0 0 0 1 1 1 ] \begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \\ \end{bmatrix}\begin{bmatrix} 1 & 1 & 1 \\ 0 & 0 & 0 \\ -1 & -1 & -1 \\ \end{bmatrix}
  4. Sobel算子 [ 1 0 1 2 0 2 1 0 1 ] [ 1 2 1 0 0 0 1 2 1 ] \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \\ \end{bmatrix}\begin{bmatrix} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \\ \end{bmatrix}

在这里插入图片描述

边缘连接

由于噪声的原因,边界的特征很少能够被完整地描述,在亮度不一致的地方会中断。典型的边缘检测算法后面总要跟随着连接过程和其他边界检测过程,用来规整边界像素,成为有意义的边界。

简单来说大概有两类方法:

1、局部处理法

1.1 基本原理:
对做过边缘检测的图像的每个点 ( x , y ) (x,y) 的特性在一个小的邻域中进行分析,所有相似的点被连接形成一个享有共同特性像素的边界。

在这里插入图片描述

所分析的特性一般是像素之间梯度算子的响应强度梯度方向

  • 通过比较梯度强度确定两个点之间的连接性:
    对于点 ( x , y ) (x',y') ,判断其是否与领域内的点 ( x , y ) (x,y) 相似,当 f ( x , y ) f ( x , y ) T |\nabla f(x,y)-\nabla f(x',y')|\leqslant T 时可以判定两个像素之间的梯度强度相近。
  • 通过比较梯度方向确定两个点之间的连接性:
    对于点 ( x , y ) (x',y') ,判断其是否与领域内的点 ( x , y ) (x,y) 的方向角相似,当 α ( x , y ) α ( x , y ) T |\alpha(x,y)-\alpha(x',y')|\leqslant T 时可以判定两个像素之间的有相互连接的趋势。

若梯度强度和梯度方向都小于所设置的阈值,则可以说像素 ( x , y ) (x,y) ( x , y ) (x',y') 是连接的

1.2 边缘跟踪:
将检测的边缘点连接成线,形成有意义的边界。

  • 光栅跟踪
    采用电视光栅行扫描顺序,结合阈值检测,对遇到的像素进行分析从而确定是否为边缘的跟踪方法,具体步骤如下:
    (1) 选取一个较大的检测阈值 d d ,对图像第一行进行阈值化。大于 d d 的像素作为对象点,并作为下一步跟踪的起始点
    (2) 选取一个较小的跟踪阈值 k k ,例如灰度差阈值
    (3) 扫描下一行像素(像素 ( i , j ) (i,j) 的下一行像素 ( i + 1 , j 1 ) (i+1,j-1) ( i + 1 , j ) (i+1,j) ( i + 1 , j + 1 ) (i+1,j+1) 为跟踪邻域),凡与上一行对象点相邻接的像素灰度差小于 k k 的且值最小的点接受为新对象点,反之去除
    (4) 对未被接受为对象点的其他各行像素再次从步骤(1)开始重复
    在这里插入图片描述
  • 全向跟踪
    全向跟踪是指跟踪方向可以是任意方向,并且有足够大的跟踪距离的跟踪方法。是一种改变了邻域定义和跟踪准则的光栅跟踪法,其跟踪步骤和原则与光栅跟踪法一致
    (1) 邻域:选取适当的、能进行全向跟踪的邻域,例如八邻域等
    (2) 跟踪准则:选择一个适当的跟踪准则,如灰度阈值、对比度和空间距离等
2、Hough变换

在找出边界点集之后,需要连接形成完整有意义的边界图像描述。在预先知道区域形状的条件下,利用Hough变换不仅可以方便地得到边界曲线将不连续的像素点连接起来,而且可以用数学公式来表达该直线,性能优异。

基本思想: 对于边界上 n n 个点的点集,找出其满足形状的点集和曲线方程

这里介绍一下利用Hough变换检测直线边界的例子:
已知任意两点的直线方程 y = a x + b y=ax+b 有一个未知数平面 x y xy 和一个参数平面 a b ab ,且在未知数平面上任一条直线 y = a x + b y=ax+b 都在参数平面上对应着一个点。

那么可得,过未知数平面一个点 ( x , y ) (x,y) 的所有直线,构成参数平面上的一条直线 b = a x + y b=-ax+y 显然这是一条参数平面上的直线方程

若有两点 ( x 1 , y 1 ) (x_1,y_1) ( x 2 , y 2 ) (x_2,y_2) 且这两点在未知数平面上共线,那么这两点在参数平面上的直线将会交于 ( a , b ) (a,b) { y 1 = a x 1 + b y 2 = a x 2 + b { b = a x 1 + y 1 b = a x 2 + y 2 \begin{cases} y_1=ax_1+b \\ y_2=ax_2+b \\ \end{cases} \to\begin{cases} b=-ax_1+y_1 \\ b=-ax_2+y_2 \\ \end{cases} 据此可以推断,在未知数平面上共线的点最终都会交于参数平面上的 ( a , b ) (a,b) 点,因此若在参数平面上有多条直线相交于某一个点,则该点的坐标 ( a , b ) (a,b) 可以作为未知数平面上直线方程的参数,这样就检测出了这条直线边界。

Hough变换检测直线算法

  1. 在算法的实际使用过程中,为了避免出现无穷大,常用极坐标形式代替直角坐标形式。此时,参数平面就为 ρ θ \rho\theta平面 ,而不是直角坐标下的 a b ab 平面:
    x cos θ + y sin θ = ρ x\cos\theta+y\sin\theta=\rho

在这里插入图片描述

  1. 创建交点累加器或交点统计直方图,找出相交线最多的参数空间的点
  2. 找出该点对应的未知数平面的直线线段,即检测完成

实例:
在这里插入图片描述
Hough变换的扩展

  1. 检测圆
    将Hough变换应用到对圆的检测上时,其参数方程变换为 ( x c 1 ) 2 + ( y c 2 ) 2 = c 3 2 (x-c_1)^2+(y-c_2)^2=c_3^2 此时需要三个参数的参数空间
  2. 检测椭圆
    参数方程设为 ( x x 0 ) 2 a 2 + ( y y 0 ) 2 b 2 = 1 \frac{(x-x_0)^2}{a^2}+\frac{(y-y_0)^2}{b^2}=1 微分后有 x x 0 a 2 + y y 0 b 2 d y d x = 0 \frac{x-x_0}{a^2}+\frac{y-y_0}{b^2}·\frac{\text{d}y}{\text{d}x}=0 微分后的方程只有三个独立参数,只需从 ( a , b , x 0 , y 0 ) (a,b,x_0,y_0) 中选择三个参数进行检测即可
发布了208 篇原创文章 · 获赞 841 · 访问量 121万+

猜你喜欢

转载自blog.csdn.net/baishuiniyaonulia/article/details/99551739