数字图像处理——实验四 数字图像的边缘检测实验

一、实验目的

(1)掌握数字图像的空间域滤波原理;

(2)掌握数字图像的边缘检测原理及常用的边缘检测算子;

(3)掌握阈值分割及图像的二值化。

二、实验主要仪器设备

(1)计算机;

(2)Python 3.x及PyCharm软件;

(3)典型的灰度、彩色图像文件。

  • 注:opencv-python 使用的是3.x 版本

三、实验原理

(1) 图像空间滤波原理

空间滤波是一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。分为低通滤波(平滑化)、高通滤波(锐化)和带通滤波。

(2) 边缘检测原理

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

四、实验内容及代码

4.1 实验内容

(1)读取图像;

(2)使用 opencv-python 对图片进行边缘检测,并对三种算子得出的结果进行比较。

4.2 实验数据

本实验有且仅用到一张图片,原始图片如 图1 所示:

在这里插入图片描述

图1. 原始图像

4.3 实验代码

4.3.1 LoG检测器

实现代码:

import cv2

img = cv2.imread(r'./data/3.jpg')
cv2.imshow('img_origin', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 1. LoG检测器
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 图像高斯滤波去噪
img_blur = cv2.GaussianBlur(img_gray, (3, 3), 1, 1)     # 核尺寸通过对图像的调节自行定义
# 调用Laplacian算法进行图像轮廓提取
LOG_result = cv2.Laplacian(img_blur, cv2.CV_16S, ksize=1)
img_LOG = cv2.convertScaleAbs(LOG_result)   # 得到 LOG 算法处理结果
cv2.imshow('img_LOG', img_LOG)
cv2.waitKey(0)
cv2.destroyAllWindows()

LoG边缘检测器效果展示:

在这里插入图片描述

图2. LoG边缘检测器效果

4.3.2 Scharr算子

实现代码:

# 2. Scharr算子
Scharr_result = cv2.Scharr(img_gray, cv2.CV_16S, dx=1, dy=0)
img_Scharr = cv2.convertScaleAbs(Scharr_result)
cv2.imshow('img_Scharr', img_Scharr)
cv2.waitKey(0)
cv2.destroyAllWindows()

Scharr算子边缘检测效果展示:

在这里插入图片描述

图3. Scharr算子边缘检测效果

4.3.3 Canny边缘检测器

实现代码:

# 3. Canny边缘检测器
img_blur_canny = cv2.GaussianBlur(img_gray, (7, 7), 1, 1)
img_Canny = cv2.Canny(img_blur_canny, 50, 150)
cv2.imshow('img_Canny', img_Canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

Canny算子边缘检测效果展示:

在这里插入图片描述

图4. Canny算子边缘检测效果

猜你喜欢

转载自blog.csdn.net/alan1ly/article/details/125379899
今日推荐