一、Sobel算子
Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,然而在很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是在对效率要求较高,而对细纹理不太关系的时候。
使用Sobel算子提取图像边缘分3个步骤:
- 提取X方向的边缘,X方向一阶Sobel边缘检测算法为:
[ − 1 0 1 − 2 0 2 − 1 0 1 ] \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1\end{bmatrix} \quad −1−2−1000121 - 提取Y方向的边缘,Y方向一阶Sobel边缘检测算法为:
[ − 1 − 2 − 1 0 0 0 1 2 1 ] \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1\end{bmatrix} \quad −101−202−101 - 综合两个方向的边缘信息得到整幅图像的边缘。
二、Python代码实现
import cv2
import os
def SobelSeg(image):
img = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
cv2.namedWindow('W3',cv2.WINDOW_NORMAL)
cv2.imshow("W3", img)
cv2.waitKey(delay=0)
return img
def convert(input_dir, output_dir):
for image_name in os.listdir(input_dir):
path = input_dir + "/" + image_name
image = cv2.imread(path)
image_1 = SobelSeg(image)
cv2.imwrite(output_dir + "/" + "0" + image_name , image_1)
if __name__ == '__main__':
input_dir = r"C:\Users\22476\Desktop\Graduation Project\Edge_test_image\original"
output_dir = r"C:\Users\22476\Desktop\Graduation Project\Edge_test_image\result_32F"
convert(input_dir, output_dir)
三、实现效果