边缘检测与阈值分割
1] 图像特征之LoG算子与DoG算子. https://senitco.github.io/2017/06/20/image-feature-LoG-DoG/.二维函数上的一点有多个求导方向,求出的导数值也各不相同,梯度的幅值即最大的导数值(方向导数)。位于两个阈值中间的,判断其与已确定的边缘是否连通,如果是,则其也是边缘上的点,否则,不是边缘上的点。对比该点的梯度值与求出的前后两点梯度值,如果
Canny
[1] Canny Edge Detection. https://docs.opencv.org/3.4/da/d22/tutorial_py_canny.html
[2] OpenCV Edge Detection ( cv2.Canny ). https://pyimagesearch.com/2021/05/12/opencv-edge-detection-cv2-canny/
由John F. Canny提出
1、由于边缘检测容易受噪声影响,采用Gaussian空间滤波器去噪
2、采用Sobel核求图像水平与垂直方向的导数
G
x
,
G
y
G_x, G_y
Gx,Gy
x
:
[
−
1
0
1
−
2
0
2
−
1
0
1
]
,
y
:
[
−
1
−
2
−
1
0
0
0
1
2
1
]
x: \begin{bmatrix} -1&0&1 \\ -2&0&2 \\ -1&0&1 \end{bmatrix}, y: \begin{bmatrix} -1&-2&-1 \\ 0&0&0 \\ 1&2&1 \end{bmatrix}
x:
−1−2−1000121
,y:
−101−202−101
3、计算边缘的梯度
(
G
,
θ
)
(G,\theta)
(G,θ)
幅值
G
=
G
x
2
+
G
y
2
G = \sqrt{G_x^2 + G_y^2}
G=Gx2+Gy2
方向
θ
=
t
a
n
−
1
(
G
y
/
G
x
)
\theta =tan^{-1}(G_y/G_x)
θ=tan−1(Gy/Gx)
注:梯度是一个向量,包含导数值以及求导方向;二维函数上的一点有多个求导方向,求出的导数值也各不相同,梯度的幅值即最大的导数值(方向导数)。
4、非局部极大值抑制
图像上每一点都一个梯度值与梯度方向
通过插值,求解该点梯度方向上的前后两点的梯度值
对比该点的梯度值与求出的前后两点梯度值,如果该点是极大值,则保留,否则置0
遍历所有点,便求出图像边缘上的所有点
5、滞后阈值法
高于大阈值的为边缘上的点
小于小阈值的不是边缘上的点
位于两个阈值中间的,判断其与已确定的边缘是否连通,如果是,则其也是边缘上的点,否则,不是边缘上的点
注:认为梯度方向与边缘垂直
反锐化掩膜与锐化掩膜
[1] 【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask. http://t.csdn.cn/54TvN.
提取图像高频信息,将其与图像叠加进行边缘增强
H: high pass filter
L: low pass filter
锐化掩膜
I
1
=
I
0
+
w
∗
H
(
I
0
)
I_1 = I_0 + w*H(I_0)
I1=I0+w∗H(I0)
反锐化掩膜
I
1
=
I
0
+
(
I
0
−
w
∗
L
(
I
0
)
)
/
(
1
−
w
)
I_1 = I_0 + (I_0 - w*L(I_0))/(1-w)
I1=I0+(I0−w∗L(I0))/(1−w)
LoG,DoG
[1] 图像特征之LoG算子与DoG算子. https://senitco.github.io/2017/06/20/image-feature-LoG-DoG/.
将Laplace算子作用于图像:
∇
2
I
=
I
x
x
+
I
y
y
\nabla^2 I = I_{xx} + I_{yy}
∇2I=Ixx+Iyy
作用:突出图像点,线和边缘,抑制均匀和平滑变化的区域
由于微分运算对噪声敏感,先将图像进行高斯平滑滤波,再应用Laplace算子
LoG:
∇
2
(
G
∗
I
)
=
(
∇
2
G
)
∗
I
\nabla^2 (G*I) = (\nabla^2 G) * I
∇2(G∗I)=(∇2G)∗I
由于
G
x
x
+
G
y
y
=
k
G
σ
G_{xx} + G_{yy} = k G_\sigma
Gxx+Gyy=kGσ,因此可以用DoG代替LoG
DoG:
G
(
σ
1
)
∗
I
−
G
(
σ
2
)
∗
I
=
(
G
(
σ
1
)
−
G
(
σ
2
)
)
∗
I
G(\sigma_1)*I - G(\sigma_2)*I = (G(\sigma_1) - G(\sigma_2))*I
G(σ1)∗I−G(σ2)∗I=(G(σ1)−G(σ2))∗I
OSTU算法
[1] Ostu(大津法)二值化图像算法/最佳全局阈值. http://t.csdn.cn/pVHqD.
[2] 吴 熙, 钱盛友. 基于LoG 算子的图像边缘增强算法的改进.
灰度图像
I
i
j
I_{ij}
Iij的均值与方差
均值
μ
=
1
M
N
Σ
i
I
i
j
\mu = \frac{1}{MN} \Sigma_i I_{ij}
μ=MN1ΣiIij
方差
σ
2
=
1
M
N
Σ
i
Σ
j
(
I
i
j
−
μ
)
2
\sigma^2 = \frac{1}{MN} \Sigma_i \Sigma_j (I_{ij} - \mu)^2
σ2=MN1ΣiΣj(Iij−μ)2
注:图像的均值就是期望
灰度图像由像素值
T
T
T可分为前景与背景
I
=
I
1
+
I
2
I = I_1 + I_2
I=I1+I2
类间方差
σ
B
2
=
c
1
σ
2
(
I
1
)
+
c
2
σ
2
(
I
2
)
\sigma^2_B = c_1 \sigma^2(I_1) + c_2 \sigma^2(I_2)
σB2=c1σ2(I1)+c2σ2(I2)
类内方差
σ
W
2
=
c
1
(
μ
(
I
1
)
−
μ
(
I
)
)
2
+
c
2
(
μ
(
I
2
)
−
μ
(
I
)
)
2
\sigma^2_W = c_1 (\mu(I_1) - \mu(I))^2 + c_2 (\mu(I_2) - \mu(I))^2
σW2=c1(μ(I1)−μ(I))2+c2(μ(I2)−μ(I))2
其中,
c
1
=
N
(
I
1
)
/
N
(
I
)
,
c
2
=
N
(
I
2
)
/
N
(
I
)
c_1 = N(I_1)/N(I), c_2 = N(I_2)/N(I)
c1=N(I1)/N(I),c2=N(I2)/N(I),
N
N
N为像素计数函数
σ
2
=
σ
B
2
+
σ
W
2
\sigma^2 = \sigma^2_B + \sigma^2_W
σ2=σB2+σW2
OSTU算法
遍历图像灰度直方图的所有像素作为
T
T
T,取使得类间方差最大与类内方差最小的
T
T
T作为最终划分图像的像素值
T
=
a
r
g
m
a
x
(
σ
B
2
(
T
)
)
T = argmax(\sigma^2_B(T))
T=argmax(σB2(T))
T
=
a
r
g
m
i
n
(
σ
W
2
(
T
)
)
T = argmin(\sigma^2_W(T))
T=argmin(σW2(T))
文献[2]采用的是:
T
=
a
r
g
m
a
x
(
σ
B
2
(
T
)
/
σ
W
2
(
T
)
)
T = argmax(\sigma^2_B(T)/\sigma^2_W(T))
T=argmax(σB2(T)/σW2(T))
更多推荐
所有评论(0)