Sobel算子是像素图像边缘检测中最重要的算子之一,在机器学习、数字媒体、计算机视觉等信息科技领域起着举足轻重的作用。在技术上,它是一个离散的一阶
差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。
[1]
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
可用以下公式计算梯度方向。
在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
高斯模糊(https://en.wikipedia.org/wiki/Gaussian_blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次。
import
matplotlib.pyplot
as
plt
import
matplotlib.image
as
mpimg
import
cv2
import
numpy
as
np
image
=
cv2.imread(
"./imgs/9.jpg"
)
gray
=
cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray_blur
=
cv2.GaussianBlur(gray,(
9
,
9
),
5
)
f
=
np.fft.fft2(gray
/
225.0
)
f_shift
=
np.fft.fftshift(f)
grayfft
=
10
*
np.log(np.abs(f_shift))
core_sobelx
=
np.array([[
-
1
,
0
,
1
],[
-
2
,
0
,
2
],[
-
1
,
0
,
1
]])
core_sobely
=
np.array([[
-
1
,
0
,
1
],[
-
2
,
0
,
2
],[
-
1
,
0
,
1
]])
gray_blur_sobelx
=
cv2.filter2D(gray_blur,
2
,core_sobelx)
gray_blur_sobely
=
cv2.filter2D(gray_blur,
2
,core_sobely)
gray_blur
=
cv2.filter2D(gray,
2
,core_sobelx)
f,(a0,a1,a2,a3,a4,a5)
=
plt.subplots(
1
,
6
,
figsize
=
(
30
,
30
))
a5.set_title(
"fft gray"
)
a5.imshow(grayfft,
cmap
=
'gray'
)
a0.set_title(
"oraginal gray"
)
a0.imshow(gray,
cmap
=
'gray'
)
a1.set_title(
"oraginal gray filter"
)
a1.imshow(gray_blur,
cmap
=
'gray'
)
a2.set_title(
"blur gray"
)
a2.imshow(gray_blur,
cmap
=
'gray'
)
a3.set_title(
"blur gray with sobel x"
)
a3.imshow(gray_blur_sobelx,
cmap
=
'gray'
)
a4.set_title(
"blur gray with sobel y"
)
a4.imshow(gray_blur_sobely,
cmap
=
'gray'
)
retval,binary_image
=
cv2.threshold(gray_blur_sobelx,
100
,
225
,cv2.THRESH_BINARY)
plt.figure()
plt.imshow(binary_image,
cmap
=
'gray'
)
plt.show()