完整代码在 FchZero/Digita_Image_Processing_Experiment (github.com)
一、实验目的
1.掌握数字图像的空间域滤波原理;
2.掌握数字图像的边缘检测原理及常用的边缘检测算子;
3.掌握阈值分割及图像的二值化。
二、实验原理
1.图像空间滤波原理:空间滤波是一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。分为低通滤波(平滑化)、高通滤波(锐化)和带通滤波。
2.边缘检测原理:边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
三、实验内容、核心算法/代码及结果
1.使用opencv-python除实验二中剩余的三种边缘检测器进行图片边缘检测
img = cv.imread('Experiment_content\\Experiment1-4\\4.jpg')
img_GRAY = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# LOG 检测器
L_S_blur = cv.GaussianBlur(img_GRAY, (3, 3), 1, 1) #核尺寸通过对图像的调节自行定义
ret,thresh = cv.threshold(L_S_blur, 127, 255, cv.THRESH_BINARY) #二进制阈值化
# 调用Laplacian()算法的OpenCV库函数进行图像轮廓提取
temp_LOG = cv.Laplacian(L_S_blur, cv.CV_16S, ksize=1)
# Laplace = cv.Laplacian(thresh, cv.CV_16S, ksize=1)
LOG = cv.convertScaleAbs(temp_LOG) # 得到 LOG 算法处理结果
cv.imshow("LOG", LOG)
cv.waitKey()
# Scharr 算子
Scharr_x = cv.Scharr(L_S_blur, cv.CV_16S, 1, 0)
Scharr_y = cv.Scharr(L_S_blur, cv.CV_16S, 0, 1)
# Scharr_x = cv.Scharr(thresh, cv.CV_16S, 1, 0)
# Scharr_y = cv.Scharr(thresh, cv.CV_16S, 0, 1)
Scharr_absx = cv.convertScaleAbs(Scharr_x)
Scharr_absy = cv.convertScaleAbs(Scharr_y)
Scharr = cv.addWeighted(Scharr_absx, 0.5, Scharr_absy, 0.5, 0)
cv.imshow('Scharr', Scharr)
cv.waitKey(0)
# Canny 检测器
C_blur = cv.GaussianBlur(img_GRAY,(7,7),1,1)
# Canny 算子进行边缘提取
temp_Canny = cv.Canny(C_blur, 50, 150)
Canny = cv.convertScaleAbs(temp_Canny)
cv.imshow('Canny', Canny)
cv.waitKey(0)
cv.destroyAllWindows()
完整代码在FchZero/Digita_Image_Processing_Experiment (github.com)