Menu

图像分割

post on 02 Jan 2020 about 1812words require 7min
CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~

定义

分割可以看作将全图RR划分为子区域R1,R2,,RnR_1,R_2,\dots,R_n的过程(其中,P(R)P(R)为定义在集合RR的点上的逻辑谓词):

  1. i=1nRi=R\bigcup_{i=1}^nR_i=R
  2. RiR_i是连通块
  3. ij,RiRj=\forall i \ne j,R_i\cap R_j=\emptyset
  4. ij,P(RiRj)\forall i \ne j,P(R_i\cup R_j)为假
  5. P(Ri)P(R_i)为真

图像分割一般基于亮度值的两种基本特性(不连续性相似性)。

间断检测

寻找间断最一般方法是对整幅图像使用模板(滤波器)进行检测。

点检测

1 1 1
1 -8 1
1 1 1

如果作用算子后的图像R(x,y)>T\vert R(x,y)\vert >T,其中阈值T>0T>0,则模板中心位置的点为所求的点。

线检测

线检测通常采用如下 4 种摸板:

  • 水平:

    -1 -1 -1
    2 2 2
    -1 -1 -1
  • +45°+45\degree

    2 -1 -1
    -1 2 -1
    -1 -1 2
  • 垂直:

    -1 2 -1
    -1 2 -1
    -1 2 -1
  • 45°-45\degree

    -1 -1 2
    -1 2 -1
    2 -1 -1

如果上述 4 种模板产生的响应分别为:R1,R2,R3,R4R_1,R_2,R_3,R_4,并且ijiRi>Rj\exist i\forall j\ne i \vert R_i\vert > \vert R_j \vert,则认为此点与模板ii方向的线有关。

边缘检测

傅里叶变换无法刻画边缘,只知道高频成分,不知道高频在哪里。一种方法是局部傅里叶变换,衍生出小波变换(就是要构造一种高通滤波器):有震荡信号的位置(小范围震荡且积分为 0),可以刻画边缘。

三种边缘模型

主要使用一阶导数和二阶导数检测图像中的边缘。如下图所示,二阶导数会增大噪声,因此做边缘检测之前应该先抑制噪声(平滑)。

通常通过阈值确定边缘位置。

  • 常用方法:
    • Canny 边缘检测器:低错误率(边缘一个不落,一个不多);边缘点应该被很好定位(标记的边缘点与真实边缘中心之间的距离最小);单一边缘点响应(对于真实的边缘点,检测器仅返回一个点,即真实边缘周围的局部最大数应该最小)
    • 算法步骤:用一个高斯滤波器平滑输入图像;计算梯度幅值图像和角度图像(Canny 为二阶梯度算子)M(x,y)=gx2+gy2,α(x,y)=arctangygxM(x,y)=\sqrt{g_x^2+g_y^2},\quad\alpha(x,y)=\arctan \frac{g_y}{g_x};梯度幅值图像应用非最大抑制;用双阈值处理和连接分析来检测并连接边缘
    • 双阈值法:高阈值THT_H和低阈值TLT_L,比率为2:12:13:13:1 gNN(x,y)=gN(x,y)TH强边缘gNL(x,y)=gN(x,y)TL弱边缘(可能是边缘也可能不是)+强边缘gNL(x,y)=gNL(x,y)gNH(x,y)弱边缘\begin{aligned} g_{NN}(x,y) &= g_N(x,y)\geq T_H & \text{强边缘}\\ g_{NL}(x,y) &= g_N(x,y)\geq T_L & \text{弱边缘(可能是边缘也可能不是)+强边缘}\\ g_{NL}(x,y) &= g_{NL}(x,y)-g_{NH}(x,y) & \text{弱边缘} \end{aligned}
    • 用弱边缘补齐强边缘来获得完整边缘
    • gNN(x,y)g_{NN}(x,y)中定位下一个未被访问的边缘像素pp
    • gNL(x,y)g_{NL}(x,y)中用 8 连通方法连接到pp
    • 如果gNN(x,y)g_{NN}(x,y)中所有非零标记都已经访问过,则跳到(d),否则(a)
    • gNL(x,y)g_{NL}(x,y)中未被标记为有效边缘的像素的所有像素置零。
    • gNL(x,y)g_{NL}(x,y)中非零像素附加到gNN(x,y)g_{NN}(x,y)
    • 边缘连接:边界是封闭的边缘。边界检测=边缘检测+边缘连接\text{边界检测}=\text{边缘检测}+\text{边缘连接}
    • 区域处理:用多边形拟合算法
    • 边界检测
      • 用 Hough(霍夫)变换进行边界检测:通过边界点找已知形状的目标。
      • 直线检测问题:已知一组边缘点,找一条直线,使它通过最多边缘点。直线方程用极坐标表示ρ=xcosθ+ysinθ\rho=x\cos\theta+y\sin\theta通过辅助角变换可得ρ=A0sin(θ+ϕ0)\rho=A_0\sin(\theta+\phi_0)故可映射到ρOθ\rho O\theta空间,其中每一个点是xOyxOy平面上的通过同一个点的一条线。如果有一组位于由参数ρ0\rho_0θ0\theta_0决定的直线上的边缘点,则每个边缘点对应了ρ,θ\rho,\theta空间的一条正弦曲线。所有这些曲线必然会交于点(ρ0,θ0)(\rho_0,\theta_0),因为这是它们共享的一条直线的参数。故对于边缘点的直线拟合问题,即找一个使边缘点确定的正弦曲线相交最多的点(ρ,θ)(\rho,\theta)