数字图像处理MATLAB学习笔记(九)

数字图像处理MATLAB学习笔记(九)

Image Segmentation 图像分割

1 Point, Line, and Edge Detection

1.1 Point Detection

嵌在一幅图像的恒定区域或亮度几乎不变的区域里的孤立点的检测

当模板中心是孤立点时,模板的响应最强,而在恒定亮度区域中,响应为零。

1.2 Line Detection

我们通常使用以下四种Mask去进行Line Detection:

  • 水平: [ − 1 − 1 − 1 2 2 2 − 1 − 1 − 1 ] {\left[\begin{matrix}-1&-1&-1\\2&2&2\\-1&-1&-1\end{matrix}\right]} 121121121
  • 45度角: [ − 1 − 1 2 − 1 2 − 1 2 − 1 − 1 ] {\left[\begin{matrix}-1&-1&2\\-1&2&-1\\2&-1&-1\end{matrix}\right]} 112121211
  • 垂直: [ − 1 2 − 1 − 1 2 − 1 − 1 2 − 1 ] {\left[\begin{matrix}-1&2&-1\\-1&2&-1\\-1&2&-1\end{matrix}\right]} 111222111
  • -45度角: [ 2 − 1 − 1 − 1 2 − 1 − 1 − 1 2 ] {\left[\begin{matrix}2&-1&-1\\-1&2&-1\\-1&-1&2\end{matrix}\right]} 211121112

假定这 4 个模板分别用于图像,如果在图像的中心点,满足 ∣ R i ∣ > ∣ R j ∣ , j ≠ i |R_i|>|R_j|,j\ne i Ri>Rj,j=i,我们就说那个点与模板 i i i 方向的线更相关。

如果我们对图像中所有由给定模板定义的方向的线感兴趣,可以简单地通过图像运行这些模板,并对结果的绝对值取阈值,留下来的点便是响应最强烈的那些点,这些点与模板定义的方向最接近,并且线只有一个像素宽。

1.3 Edge Detection Using Function edge

二维函数 f (x, y)的梯度定义为一个向量:KaTeX parse error: Undefined control sequence: \part at position 75: …{bmatrix}\frac{\̲p̲a̲r̲t̲ ̲f}{\part x}\\\f…

这个向量的幅值是(为了简化计算,有时候这个数值采取省略平方根计算的方法):
KaTeX parse error: Undefined control sequence: \part at position 53: …g^2_y]^{1/2}=[(\̲p̲a̲r̲t̲ ̲f/\part x)^2+(\…
梯度向量的基本性质是:梯度向量指向(x,y)坐标处 f 的最大变化率方向

其中,最大变化率处发生的角度为
α ( x , y ) = tan ⁡ − 1 [ g y g x ] \alpha(x,y)=\tan^{-1}\Big[\frac{g_y}{g_x}\Big] α(x,y)=tan1[gxgy]
二维函数f(x, y)的拉普拉斯由二阶微分构成:
KaTeX parse error: Undefined control sequence: \part at position 23: …^2f(x,y)=\frac{\̲p̲a̲r̲t̲^2f(x,y)}{\part…
拉普拉斯自身很少被直接用作边缘检测,因为作为二阶导数,拉普拉斯对噪声的敏感性无法接受,它的幅度会产生双边缘,而且无法检测边缘方向。

但是当与其他边缘检测技术组合使用时,拉普拉斯是强有力的补充方法。例如,***虽然双边缘不适合直接做边缘检测,但是这个性质可通过寻找双边缘间的零交叉来为边缘定位***。

图像处理工具箱函数 function edge 提供了一些基础的边缘估计器:

[g, t] = edge(f, 'method', parameters)
Edge DetectorDescription
Sobelx方向: [ − 1 − 2 − 1 0 0 0 1 2 1 ] \begin{bmatrix}-1&-2&-1\\0&0&0\\1&2&1\end{bmatrix} 101202101,y方向: [ − 1 0 1 − 2 0 2 − 1 0 1 ] \begin{bmatrix}-1&0&1\\-2&0&2\\-1&0&1\end{bmatrix} 121000121
Prewittx方向: [ − 1 − 1 − 1 0 0 0 1 1 1 ] \begin{bmatrix}-1&-1&-1\\0&0&0\\1&1&1\end{bmatrix} 101101101,y方向: [ − 1 0 1 − 1 0 1 − 1 0 1 ] \begin{bmatrix}-1&0&1\\-1&0&1\\-1&0&1\end{bmatrix} 111000111
Robetsx方向: [ − 1 0 0 1 ] \begin{bmatrix}-1&0\\0&1\end{bmatrix} [1001],y方向: [ 0 − 1 1 0 ] \begin{bmatrix}0&-1\\1&0\end{bmatrix} [0110]
Laplacian of a Gaussian(LoG)在使用高斯滤波器的拉普拉斯滤波 f(x,y)后,通过寻找零交叉来发现边缘
Zero crossings用指定的滤波器滤波 f(x,y)之后,寻找零交叉以发现边缘
Canny通过寻找 f(x,y)的梯度的局部最大值来发现边缘。梯度由高斯滤波器的微分来计算。该方法使用两个阈值检测强的和弱的边缘,如果它们被连接到强边缘,那么在输出中只包含弱边缘。因此,这种方法更适合用于检测真实的弱边缘。

其中,f 是输入图像,method 是表中列出方法中的一种,parameters 是下边说明的附加参数。

  • 输出 g 是在 f 中被检测到的边缘点的位置为 1,而在其他地方为 0 的逻辑数组。
  • 参数 t 是可选择的,由 edge 给出的阈值,以决定哪个梯度值足够大到可以被称作边缘点。

我们假定有一块图像区域表示如下:
[ z 1 z 2 z 3 z 4 z 5 z 6 z 7 z 8 z 9 ] \begin{bmatrix}z_1&z_2&z_3\\z_4&z_5&z_6\\z_7&z_8&z_9\end{bmatrix} z1z4z7z2z5z8z3z6z9

1.3.1 Sobel Edge Detector

根据标中的 Sobel 算子,对应的 x 和 y 方向上的梯度值为:
g x = ( z 7 + 2 z 8 + z 9 ) − ( z 1 + 2 z 2 + z 3 ) g y = ( z 3 + 2 z 6 + z 9 ) − ( z 1 + 2 z 4 + z 7 ) g_x=(z_7+2z_8+z_9)-(z_1+2z_2+z_3)\\ g_y=(z_3+2z_6+z_9)-(z_1+2z_4+z_7) gx=(z7+2z8+z9)(z1+2z2+z3)gy=(z3+2z6+z9)(z1+2z4+z7)
那么梯度大小为:
∇ f = [ g x 2 + g y 2 ] 1 / 2 = [ [ ( z 7 + 2 z 8 + z 9 ) − ( z 1 + 2 z 2 + z 3 ) ] 2 + [ ( z 3 + 2 z 6 + z 9 ) − ( z 1 + 2 z 4 + z 7 ) ] 2 ] 1 / 2 \nabla f = [g_x^2+g_y^2]^{1/2}=\big[[(z_7+2z_8+z_9)-(z_1+2z_2+z_3)]^2+[(z_3+2z_6+z_9)-(z_1+2z_4+z_7)]^2\big]^{1/2} f=[gx2+gy2]1/2=[[(z7+2z8+z9)(z1+2z2+z3)]2+[(z3+2z6+z9)(z1+2z4+z7)]2]1/2
其中,z 是亮度。如果在位置 (x,y) 处, ∇ f ≥ T \nabla f\ge T fT,那么在该位置的像素是边缘像素,其中的 T是指定的阈值。

Sobel 检测算子的一般调用语法是:

[g,t] = edge(f, 'sobel', T, dir)

其中 f 是输入图像,T 是指定的阈值,dir 是指定的检测边缘的首选方向:‘horizontal’、‘vertical’或’both’(默认值)。

如果 T 被指定了值,那么 t=T;否则,如果 T 没有被赋值(或是空的[]),edge 令 t 等于自动决定的阈值,并用于边缘检测。

1.3.2 Prewitt Edge Detector

根据标中的 Prewitt 算子,对应的 x 和 y 方向上的梯度值为:
g x = ( z 7 + z 8 + z 9 ) − ( z 1 + z 2 + z 3 ) g y = ( z 3 + z 6 + z 9 ) − ( z 1 + z 4 + z 7 ) g_x=(z_7+z_8+z_9)-(z_1+z_2+z_3)\\ g_y=(z_3+z_6+z_9)-(z_1+z_4+z_7) gx=(z7+z8+z9)(z1+z2+z3)gy=(z3+z6+z9)(z1+z4+z7)
一般调用语法是:

[g,t] = edge(f, 'prewitt', T, dir)

Prewitt 检测算子相比 Sobel 检测算子在计算上要简单一点,但是比较容易产生噪声。

1.3.3 Roberts Edge Detector

根据标中的 Roberts 算子,对应的 x 和 y 方向上的梯度值为:
g x = z 9 − z 5 , g y = z 8 − z 6 g_x=z_9-z_5,g_y=z_8-z_6 gx=z9z5,gy=z8z6
一般调用语法是:

[g,t] = edge(f, 'roberts', T, dir)

Roberts 检测算子是数字图像处理中最古老的边缘检测算子中的一种,并且也是最简单的一种。这种检测算子的使用明显少于其他几种算子,比如,Roberts 检测算子是非对称的,而且不能检测诸如 45°倍数的边缘。

1.3.4 Laplacian of a Gaussian(LoG) Detector

高斯函数:$G(x,y)=exp(-\frac{x2+y2}{2\sigma^2})\$。其中的 σ \sigma σ 是标准差,是一个Smoothing Function。如果和图像卷积,将会使图像变模糊,模糊的程度由 σ \sigma σ 的值决定。

高斯函数的拉普拉斯算法是:
KaTeX parse error: Undefined control sequence: \part at position 23: …^2G(x,y)=\frac{\̲p̲a̲r̲t̲^2G(x,y)}{\part…
我们用 ∇ 2 G ( x , y ) \nabla^2G(x, y) 2G(x,y) 卷积图像,这么做得到两个效果:平滑图像(因而减少了噪声);计算拉普拉斯,从而产生双边缘图像。然后在双边缘之间定位由发现的零交叉组成的边缘。

一般调用语法是:

[g,t]= edge(f, 'log', T, sigma)

其中的 sigma 是标准差,默认值是 2。

1.3.5 Zero-Crossings Detector 零交叉检测算子

这种检测算子基于的概念与 LoG 方法相同,但是卷积使用特殊的滤波函数 H 来完成。

一般调用语法是:

[g,t]= edge(f, 'zerocross', T, H)
1.3.6 Canny Edge Detector

Canny 检测算子是 edge 函数中最强的边缘检测算子:

  1. 图像用指定了标准差 σ \sigma σ 的高斯滤波器来平滑,用以减少噪声。
  2. 局部梯度 [ g x 2 + g y 2 ] 1 / 2 [g_x^2+g_y^2]^{1/2} [gx2+gy2]1/2 和边缘方向 tan ⁡ − 1 ( g x / g y ) \tan^{-1}(g_x/g_y) tan1(gx/gy) 在每一点都计算。边缘点被定义为梯度方向上局部强度最大的点。
  3. 在 2 中决定的边缘点在梯度幅度图像上给出脊。然后,算法则追踪所有脊的顶部,设置所有的不在脊的顶部的像素为零。因此,在输出中给出一条细线,这是众所周知的非最大值抑制处理。脊像素使用称为“滞后阈值”的技术进行阈值处理,这种技术以使用两个阈值为基础,即 T1 和 T2,且 T1 < T2。值大于 T2 的脊像素称作强边缘像素,T1 和 T2 之间的脊像素称作弱边缘像素。
  4. 最后,算法用合并 8 连接的弱像素点到强像素点的方法执行边缘连接。

一般调用语法是:

[g,t]= edge(f, 'canny', T, sigma)

在这里,T 是向量。T=[T1,T2],包含在前边步骤 3)的两个阈值,sigma 是平滑滤波器的标准差。如果 t 包括在输出参量中,t 就是二元矢量,其中包含该算法用到的两个阈值。

2 Line Detection Using the Hough Transform 使用霍夫变换的线检测

2.1 Function hough

Function hough

[H, theta, rho] = hough(f)

完整的语法形式:

[H, theta, rho] = hough(f, 'ThetaRes', val1, 'RhoRes', val2)

其中,H 是霍夫变换矩阵,theta(以度计)和 rho 是 ρ \rho ρ θ \theta θ 值向量。输入 f 是二值图像,val1 是 0 到 90 的标量,指定了沿 θ 轴霍夫变换的间距(默认是 1),val2 是 0<val2<hypot(size(I,1),size(I,2))的实标量,指定了沿 ρ \rho ρ 轴的霍夫变换的间隔(默认是 1)。

2.2 Function houghpeaks

线检测和连接用的霍夫变换的第一步是用高的计数寻找累加单元。因为存在霍夫变换参数空间中的量化和典型图像的边缘并不是很完美的直线这样的事实,霍夫变换的峰值倾向于相比霍夫变换单元更多。

Function houghpeaks,用来寻找指定的峰值数::

peaks = houghpeaks(H, NumPeaks)

完整的语法形式:

peaks = houghpeaks(..., 'Threshold', val1, 'NHoodSize', val2)

peaks 的输入是持有峰值行和列坐标的 Q×2 大小的矩阵。Q 的范围是 0 到 NumPeaks,H 是霍夫变换矩阵。

参数 val1 是非负的标量,指定了H中的什么值被考虑为峰值;val1 可以从 0 到 Inf 变化,默认值是 0.5*max(H(😃)。

参数 val2 是奇整数的两元素矢量,指定量围绕峰值的邻域大小。

当鉴别出峰值之后,邻域中的元素被置为0。默认是由最小奇数值组成的两元素矢量大于或等于 size(H)/50。

这个过程的基本思想是:通过把发现峰值的直接邻域中的霍夫变换单元置 0 来清理峰值

2.3 Function houghlines

一旦一组候选的峰值在霍夫变换中被识别出来,如果存在与这些峰值相关的有意义的线段,剩下的就是决定线的起始点和终点。

Function houghlines

lines = houghlines(f, theta, rho, peaks)

完整的语法形式:

lines = houghlines(..., 'FillGap', val1, 'MinLength', val2)

其中,theta 和 rho 是来自函数 hough 的输出,peaks 是函数 houghpeaks 的输出。输出 lines 是结构数组,长度等于找到的线段数。结构中的每个元素可以看成一条线,并含有下列字段:

  • point1:两元素向量[r1,c1],指定了线段终点的行列坐标。
  • point2:两元素向量[r2,c2],指定了线段其他终点的行列坐标。
  • theta:与线相关的霍夫变换的以度计量的角度。
  • rho:与线相关的霍夫变换的ρ轴位置。
  • val1 是正的标量,指定了与相同的霍夫变换相关的两条线段的距离。当两条线段之间的距离小于指定的值时,函数 houghlines 把线段合并为一条线段(默认的距离是 20 个像素)。
  • val2 是正的标量,指定合并的线是保留还是丢弃。如果合并的线比 val2 指定的值短,就丢弃(默认值是 40)。

3 Thresholding

主要学习自动选择阈值的方法,以及根据局部图像的性质来改变阈值的方法。

3.1 Foundation

暗背景上由亮物体组成的图像记为 f ( x , y ) f(x,y) f(x,y),目标和背景像素拥有的灰度级可分为两个占主导地位的模式。阈值记为 T T T,满足 f ( x , y ) ≥ T f(x,y)\ge T f(x,y)T的任何图像点被称为物体点,其他的点称为背景点。阈值处理后的图像 g ( x , y ) g(x,y) g(x,y)被定义为:
g ( x , y ) = { a f ( x , y ) > T b f ( x , y ) ≤ T g(x,y)=\begin{cases}a&f(x,y)\gt T\\b&f(x,y)\le T\end{cases} g(x,y)={abf(x,y)>Tf(x,y)T
标注为 a 的像素对应目标,标注为 b 的像素对应背景。(通常为了方便,令 a=1(白),b=0(黑))。

T是常数时,适用于整幅图像,上述公式用于全局阈值处理。

当阈值T在一幅图像上变化时,成为“可变阈值”。例如:暗背景中亮物体的两种类型,分别有阈值 T 1 T_1 T1和阈值 T 2 T_2 T2。如果 f ( x , y ) ≤ T 1 f(x,y)≤T_1 f(x,y)T1,多(双)阈值处理将把(x,y)处的像素分属为背景;如果 T 1 < f ( x , y ) ≤ T 2 T_1<f (x,y)≤T_2 T1<f(x,y)T2,就分属于物体类;如果 f ( x , y ) > T 2 f(x,y)>T_2 f(x,y)>T2,就分属于另一个物体。分割的图像表达为:
g ( x , y ) = { a f ( x , y ) > T 2 b T 1 < f ( x , y ) ≤ T 2 c f ( x , y ) ≤ T 1 g(x,y)=\begin{cases}a&f(x,y)\gt T_2\\b&T_1\lt f(x,y)\le T_2\\c&f(x,y)\le T_1\end{cases} g(x,y)=abcf(x,y)>T2T1<f(x,y)T2f(x,y)T1
其中,a、b、c 是三个不同的灰度值。

灰度阈值处理的成功直接关系到直方图模式下可分离的谷的宽度和深度。影响谷的特性的**关键因素**是:

  1. 峰间的分离度(峰分开得越远,分离模式的可能性越好)
  2. 图像中的噪声内容(模式随噪声增加而加宽)
  3. 物体和背景的相对大小
  4. 光源的均匀性
  5. 图像的反射特性的均匀性

3.2 Basic Global Thresholding

在图像处理中首选的方法是使用一种能基于图像数据自动地选择阈值的算法,为了自动选阈值,下列迭代过程采用的就是这样的方法:

  1. 针对全局阈值选择初始估计值 T T T
  2. T T T分割图像。这会产生两组像素: G 1 G_1 G1由所有灰度值大于 T T T的像素组成, G 2 G_2 G2由所有灰度值小于等于 T T T的像素组成。
  3. 分别计算 G 1 G_1 G1 G 2 G_2 G2区域内的平均灰度值 m 1 m_1 m1 m 2 m_2 m2
  4. 计算出新的阈值:$T = \frac{1}{2}(m_1+m_2)\$
  5. 重复步骤(2)~(4),直到在连续的重复中, T T T的差异比预先设定的参数 Δ T \Delta T ΔT小为止。
  6. 使用函数function im2bw分割图像。

Function im2bw

g = im2bw(f, T/den)

其中,den 是整数(例如一幅 8 比特图像的 255),是 T/den 比率为 1 的数值范围内的最大值。

3.3 Optimum Global Thresholding Using Otsu’s Method 使用Otsu’s方法的最佳全局阈值处理

令一幅图像的直方图成分由式表示:$P_q=\frac{n_q}{n},q=0,1,2,\dots,L-1\ 。 其 中 , 。其中, n 是 图 像 中 像 素 的 总 数 , 是图像中像素的总数, n_q 是 灰 度 级 为 是灰度级为 q 的 像 素 数 目 , 的像素数目, L 是 图 像 中 所 有 可 能 的 灰 度 级 数 ( ∗ ∗ < u > 灰 度 级 是 整 数 值 < / u > ∗ ∗ ) 。 假 设 阈 值 是图像中所有可能的灰度级数(**<u>灰度级是整数值</u>**)。假设阈值 (<u></u>)k 已 经 选 定 了 , 已经选定了, C_1 是 一 组 灰 度 级 为 是一组灰度级为 [0,1,2,\dots,k] 的 像 素 , 的像素, C_2 是 一 组 灰 度 级 为 是一组灰度级为 [k+1,\dots,L–1]$的像素。

Otsu’s为最佳方法,在某种意义上,选择阈值 k k k,最大类间方差 σ B 2 ( k ) \sigma^2_B(k) σB2(k)定义为:
σ B 2 ( k ) = P 1 ( k ) [ m 1 ( k ) − m G ] 2 + P 2 ( k ) [ m 2 ( k ) − m G ] 2 \sigma^2_B(k)=P_1(k)[m_1(k)-m_G]^2+P_2(k)[m_2(k)-m_G]^2 σB2(k)=P1(k)[m1(k)mG]2+P2(k)[m2(k)mG]2
这里, P 1 ( k ) P_1(k) P1(k)是集合 C 1 C_1 C1发生的概率:$P_1(k)=\sumk_{i=0}p_i\$。集合$C_2$发生的概率是:$P_2(k)=\sum{L-1}_{i=k+1}p_i=1-P_1(k)\$。

m 1 ( k ) m_1(k) m1(k) m 2 ( k ) m_2(k) m2(k)分别是集合 C 1 C_1 C1 C 2 C_2 C2中像素的平均灰度。 m G m_G mG是全局均值(整个图像的平均灰度):$m_G=\sum_{i=0}^{L-1}ip_i\$。

灰度级 k k k的平均灰度表达为:$m(k)=\sum^k_{i=0} ip_i\$。

展开 σ B 2 ( k ) \sigma^2_B(k) σB2(k)的表达式,并使用 P 2 ( k ) = 1 − P 1 ( k ) P_2(k)=1-P_1(k) P2(k)=1P1(k)这一事实,我们可以把类间方差写成:
σ B 2 ( k ) = [ m G P 1 ( k ) − m ( k ) ] 2 P 1 ( k ) [ 1 − P 1 ( k ) ] \sigma^2_B(k)=\frac{[m_GP_1(k)-m(k)]^2}{P_1(k)[1-P_1(k)]} σB2(k)=P1(k)[1P1(k)][mGP1(k)m(k)]2
将类间方差最大化的想法是:方差较大,完全分割一幅图像的阈值将会更接近。这个最佳度量完全基于参数,它可以直接从图像的直方图得到。我们一步步通过 k k k L L L个可能值,并在每一步计算方差。然后,选择给出 σ B 2 ( k ) \sigma^2_B(k) σB2(k)最大值的 k k k。这个 k k k就是最佳阈值。 如果最大值不唯一,那么所用的阈值是找到的所有最佳 k k k值的平均。

类间方差对总的图像灰度方差的比率,是把图像灰度分为两类(也就是物体和背景)的可分性度量:$\eta(k)=\frac{\sigma2_B(k)}{\sigma2_G}\$

范围表示为: 0 ≤ η ( k ∗ ) ≤ 1 0\le \eta(k^*) \le 1 0η(k)1。其中, k k k是最佳阈值。该度量可用于使恒定图像(像素完全不可以分成两类)达到最小值,还可用于使二值图像(像素完全可分)达到最大值。

Function graythresh

[T, SM] = graythresh(f)

在这里,T是产生的阈值并被规一化到[0,1]中,SM是可分性度量。函数function im2bw用来分割图像。

3.4 Using Image Smoothing to Improve Global Thresholding 使用图像平滑改进全局阈值处理

当噪声不能在源头减少,并且阈值处理是选择的分割方法时,提高性能的一种常用技术是在阈值处理之前先对图像进行平滑。

3.5 Using Edges to Improve Global Thresholding 使用边缘改进全局阈值处理

如果直方图的峰是高的、窄的、对称的,并且由深的谷分开,那么选到好的阈值的机会就会增大。

改进直方图的一种方法就是仅考虑那些位于或接近物体和背景间边缘的像素。比较直接和明显的改进是直方图不依赖物体和背景的相对大小。

另外,位于物体上的任何像素的概率将近似等于位于背景上的像素的概率,这样就改进了直方图峰值的对称性。

最后,满足某些基于梯度度量的像素在直方图的峰值之间有较深的谷。

3.6 基于局部统计的可变阈值处理

当背景照明高度不均匀时,有代表性的全局阈值处理就会失败。针对这个问题的一种解决办法是试图估计明暗函数,用于补偿不均匀的灰度模式;然后,用上边讨论的方法之一对图像做全局阈值处理。

针对不规则光照的补偿,或存在多于一个支配物体灰度的情况下(在这种情况下,全局阈值处理也有困难),采用的另一种方法是进行可变阈值处理。这种方法在(x, y)的邻域中以一个或多个指定像素的特性在图像的每一点(x, y)计算阈值。

我们用一幅图像中每一点的邻域中像素的标准差和均值来说明局部阈值处理的基本方法。令 σ x y \sigma_{xy} σxy m x y m_{xy} mxy 代表包含在一幅图像中以坐标(x, y)为中心的邻域中的一组像素的标准差和均值。

变量、基于局部均值和标准差的阈值的普通形式: T x y = a σ x y + b m x y T_{xy}=a\sigma_{xy}+bm_{xy} Txy=aσxy+bmxy

a 和 b 是非负的常数。另一种有用的形式是: T x y = a σ x y + b m G T_{xy}=a\sigma_{xy}+bm_G Txy=aσxy+bmG,这里, m G m_G mG是全局图像均值。

分割图像的计算如下:
g ( x , y ) = { 1 f ( x , y ) ≥ T x y 0 f ( x , y ) ≤ T x y g(x,y)=\begin{cases}1&f(x,y)\ge T_{xy}\\0&f(x,y)\le T_{xy}\end{cases} g(x,y)={10f(x,y)Txyf(x,y)Txy
其中,f (x,y)是输入图像。这个式子可在所有的像素位置进行评估和应用。

有意义的加权可用结合逻辑的局部特性代替算术特性加到局部阈值处理上,例如,可以借助逻辑“与”定义局部阈值处理,如下所示:
g ( x , y ) = { 1 f ( x , y ) > a σ x y  AND  f ( x , y ) > b m 0 otherwise g(x,y)=\begin{cases}1&f(x,y)\gt a\sigma_{xy} \space \text{AND}\space f(x,y)\gt bm\\0&\text{otherwise}\end{cases} g(x,y)={10f(x,y)>aσxy AND f(x,y)>bmotherwise
其中,m 不是局部均值就是全局均值,正如上边定义的那样。

3.7 使用移动平均的图像阈值处理

局部阈值处理方法的一种特殊情况是:沿着一幅图像的扫描线计算移动平均。

典型的扫描是以 zigzag 模式逐线执行,进而减少照明偏差。令 Z k + 1 Z_{k+1} Zk+1 表示在扫描顺序中,在第 k+1 步遇到的一个点。在新点处的移动平均(平均灰度)由下式给出:
m ( k + 1 ) = 1 n ∑ i = k + 2 − n k + 1 z i = m ( k ) + 1 n ( z k + 1 − z k − n ) m(k+1)=\frac{1}{n}\sum^{k+1}_{i=k+2-n}z_i=m(k)+\frac{1}{n}(z_{k+1}-z_{k-n}) m(k+1)=n1i=k+2nk+1zi=m(k)+n1(zk+1zkn)
其中,n代表计算平均时使用的点数,$m(1)=\frac{z_1}{n}\$。这个初始值并不严格正确,因为单点的平均值是该点自身。

另一方法是使用一个值,如果图像的边界用 n –1 个 0 填充,我们将得到这个值。

算法只初始化一次,不必在每一行初始化。因为移动平均在图像中对每一点计算,所以分割用下式执行:
f ( x , y ) = { 1 f ( x , y ) > K m x y 0 otherwise f(x,y)=\begin{cases}1&f(x,y)\gt Km_{xy}\\0&\text{otherwise}\end{cases} f(x,y)={10f(x,y)>Kmxyotherwise
其中,K 是[0, 1]范围内的常数, m x y m_{xy} mxy 是输入图像在点(x,y)处的移动平均。

4 基于区域的分割

分割的目的是把图像分成区域。

4.1 基本表达式

令 R 表示整个图像区域。可以认为分割是把 R 分成了 n 个子区域—— R 1 , R 2 , R 3 . . . , R n R_1,R_2,R_3...,R_n R1,R2,R3...,Rn 的处理,满足:

  • (a). ⋃ i = 1 n R i = R \bigcup^{n}_{i=1}R_i=R i=1nRi=R
  • (b). R i R_i Ri是连接区域, i = 1 , 2 , . . . , n i=1, 2,...,n i=1,2,...,n
  • ©. R i ⋂ R j = Φ R_i\bigcap R_j=\varPhi RiRj=Φ,针对所有的 i 和 j, KaTeX parse error: Unknown accent ' ̸' at position 2: i≠̲̲j
  • (d). P ( R i ) = TRUE ,   i = 1 , 2 , … , n P(R_i)=\text{TRUE},\space i=1,2,\dots,n P(Ri)=TRUE, i=1,2,,n
  • (e). P ( R i ⋃ R j ) = FALSE P(R_i\bigcup R_j)=\text{FALSE} P(RiRj)=FALSE,针对任何邻接的区域 R i R_i Ri R j R_j Rj

在这里, P ( R i ) P(R_i) P(Ri)是集合 R i R_i Ri 中定义的点的逻辑谓词, Φ \varPhi Φ 是空集。

  • 条件(a)指出分割必须是完全的,即每个点都必须在某个区域中。

  • 条件(b)要求区域中的点应该被连接(如 4 连接或 8 连接)。

  • 条件©说明区域间必须是不相交的。

  • 条件(d)说明分割区域中的像素点必须满足的性质。即每个区域的灰度级相等。

  • 条件(e)指出,邻接区域 R i R_i Ri R j R_j Rj 在属性 P P P 上的意义是不一样的。任意两个区域的灰度级不同。

4.2 区域生长

区域生长是根据预先定义的生长准则,把像素或子区域集合成较大区域的处理方法。

基本处理方法是以一组“种子”点开始,形成这些生长区域,把预先定义好的与这些种子性质相近的邻域像素附加到这些种子上(比如指定的灰度级或颜色范围)。

区域生长中的另一个问题是停止规则的明确表达。基本上,当没有更多像素的满足包含在区域中的准则时,区域生长的过程就应该停止。

4.3 区域分离和聚合

区域分裂合并算法的基本思想是先确定一个分裂合并的准则,即区域特征一致性的测度,当图像中某个区域的特征不一致时就将该区域分裂成4个相等的子区域,当相邻的子区域满足一致性特征时则将它们合成一个大区域,直至所有区域不再满足分裂合并的条件为止。

当分裂到不能再分的情况时,分裂结束,然后它将查找相邻区域有没有相似的特征,如果有就将相似区域进行合并,最后达到分割的作用。

总结过程如下:

  • 分离任意区域 R i R_i Ri 为 4 个不相连的象限,满足 P ( R i ) = FALSE P(R_i)=\text{FALSE} P(Ri)=FALSE
  • 当无法进一步分离时,合并任何满足 P ( R j ⋃ R k ) = TURE P(R_j\bigcup R_k)=\text{TURE} P(RjRk)=TURE 的区域 R j R_j Rj R k R_k Rk
  • 在无法进一步合并的时候停止。

5 使用分水岭变换的分割

在地理学中,分水岭是指山脊,通过不同的水系排水来分离区域。汇水盆地是把水排入河流或水库的地理区域。

分水岭变换把这些概念用于灰度图像处理,在某种程度上可用于解决各种图像分割问题。

我们把灰度图像看做拓扑表面。在这里,f (x, y)的值被解释为高度。

5.1 使用距离变换的分水岭分割

针对分割,与分水岭变换相配合的常用工具是距离变换。

二值图像的距离变换是相对简单的概念:是指从每个像素到最接近零值的像素的距离。每个值为 1 的像素的距离变换为 0,因为最靠近的非 0 像素是它本身。

距离变换可以用工具箱函数 function bwdist 来计算:

D = bwdist(f)

5.2 使用梯度的分水岭分割

在使用针对分割的分水岭变换之前,常常使用梯度幅度对图像进行预处理。

梯度幅度图像沿着物体的边缘有较高的像素值,而在其他地方则有较低的像素值。

在理想的情况下,分水岭变换可得到沿物体边缘的分水岭脊线。

5.3 控制标记符的分水岭分割

用于控制过分割的一种方法是基于标记符的概念。

标记符是属于一幅图像的连通分量。我们希望有一个内部标记符集合,它们处在每个感兴趣物体的内部,而外部标记符集合包含在背景中。

在有关图像处理的文献中,有各种用于计算内部和外部标记符的建议,其中包括前面章节描述的线性滤波、非线性滤波以及形态学处理。对于特定的应用,我们选择的方法依赖于与应用相关的图像的特性。

标记符的选择范围可以从刚才描述的简单过程到更复杂的方法,涉及尺寸、形状、位置、相对距离、纹理内容等等。指针是携带对分割有影响的先验知识的标记符。人们常常使用先验知识在每天的视觉中帮助解决分割和高级任务。最为熟悉的便是使用文本。因此,分水岭分割提供可以有效利用这些类型的知识的框架这一事实,是这一方法的突出优点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值