先利用Sobel算子对图像进行求导(这里求导的方法有很多,也可以选择高斯算子求导,或者普瑞维特(Prewitt)算子等求导),然后利用公式
gm=(dx)2+(dy)2−−−−−−−−−−−√
g
m
=
(
d
x
)
2
+
(
d
y
)
2
使用opencv库函数,python程序如下:
img = cv2.imread('46.bmp', 0) # 后面参数为0表示取灰度图
img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2RGB)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)#默认ksize=3
sobely = cv2.Sobel(img,cv2.CV_64F,0,1)
gm = cv2.sqrt(sobelx ** 2 + sobely ** 2)
plt.subplot(121),plt.imshow(img)
plt.subplot(122),plt.imshow(gm1)
plt.figure()
结果图如下:
右图即为所求图像梯度幅值特征图