1.1 实验目的
(1)了解Canny边缘检测在图像处理中的应用。
(2)理解Canny边缘检测实现的原理。
(3)掌握通过OpenCV库实现Canny边缘检测的基本方法和步骤。
1.2 实验原理
OpenCV(Open source Computer Vision Library)是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
(1)不管是科学研究,还是商业应用,都可以利用它来作开发。
(2)所有API函数的源代码都是公开的,可以看到其内部实现的程序步骤。
(3)可以修改OpenCV的源代码,编译生成需要的特定API函数。

图 42
边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。目前有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。
Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny边缘检测是一种多级边缘检测算法,该算法的目标是找到一个最优的边缘检测算法,即能够尽可能多地标识出图像中的实际边缘,同时漏检真实边缘的概率和误检非边缘的概率都尽可能小。此外,检测到的边缘点的位置应该距离实际边缘点的位置最近,或者由于噪声影响引起的检测边缘偏离物体的真实边缘的程度最小。
边缘检测的一般标准包括:以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。检测到的边缘应精确定位在真实边缘的中心。图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。为了满足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它可以由高斯函数的一阶导数来近似。
在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。
Canny边缘检测算法可以分为以下5个步骤:
(1)使用高斯滤波器,以平滑图像,滤除噪声。
由于边缘检测对噪声敏感,因此首先需要对图像进行平滑处理以减少噪声。采用高斯滤波器对图像进行卷积操作,得到平滑后的图像。
(2)计算图像中每个像素点的梯度强度和方向。
对平滑后的图像使用边缘检测算子计算水平方向和竖直方向的一阶导数,即图像梯度。
通过计算得到的梯度图,可以确定图像中每个像素点的梯度大小和方向。
(3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
在得到梯度大小和方向后,需要对图像进行非极大值抑制处理。非极大值抑制的目的是保留梯度方向上的局部最大值,从而细化边缘。对于每个像素点,检查其梯度是否在其梯度方向上的邻域内是局部最大值。如果不是,则将该像素点的梯度值置为0,即不是边缘点。
(4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
在非极大值抑制处理后,使用双阈值算法来检测和连接边缘。设置两个阈值:高阈值和低阈值。如果某个像素点的梯度值大于高阈值,则将其标记为强边缘点。如果某个像素点的梯度值小于低阈值,则将其排除为边缘点。如果某个像素点的梯度值位于两个阈值之间,则检查其是否与强边缘点相连。如果相连,则将其标记为弱边缘点;否则,将其排除为边缘点。
(5)通过抑制孤立的弱边缘最终完成边缘检测。
在OpenCV中,Canny边缘检测可以通过cv2.Canny()函数来实现。该函数的原型为:
cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) → edges
其中:
● image:8位输入图像。
● threshold1:低阈值。
● threshold2:高阈值。
● edges:输出边缘图像,与输入图像大小相同。
● apertureSize:Sobel算子的大小(默认为3)。
● L2gradient:一个布尔值,指示是否使用更精确的方式计算图像梯度幅值(默认为False)。
阈值的选择对Canny边缘检测的结果有很大影响。因此,在进行实验时需要根据图像的特点和实验需求选择合适的阈值。在进行Canny边缘检测后,需要对实验结果进行评估。可以通过观察边缘的连续性、完整性和是否保留了重要的图像信息等指标来评估实验结果的好坏。在进行Canny边缘检测之前,可以对图像进行预处理操作,如灰度化、去噪等,以提高边缘检测的效果。
基于OpenCV的Canny边缘检测是通过高斯滤波、计算梯度、非极大值抑制和双阈值检测等步骤来提取图像中的边缘信息。这种算法在图像处理中具有广泛的应用价值,如图像分割、特征提取、物体识别等领域。
3.3 实验功能
本实验通过读取本地图片进行边缘检测处理。
3.4 实验设备
(本次体验已完成,无需再操作)
(1)硬件:人工智能实验箱。
(2)软件:Windows7 64bit以上系统。
3.5 实验步骤
3.5.1 硬件连接(本次体验已完成,无需再操作)
(1)将实验箱千兆网口2通过网线连接至路由器。
(2)连接实验箱电源,按电源开关启动系统。
3.5.2 查询实验箱网络 IP(本次体验已完成,无需再操作)
等待实验箱进入系统后,通过键盘快捷键 Ctrl + Alt + T 或者键盘触摸板右按键打开菜单,选择系统终端,在终端输入如下命令查询当前网络 IP。
Target# ifconfig

图 43
3.5.3 拷贝文件(本次体验已完成,无需再操作)
打开电脑远程桌面功能,通过远程实验箱系统进行文件拷贝和操作。
在远程桌面页面输入实验箱网口IP,点击连接按钮,启动远程连接。

图 44
输入账号和密码:tronlong 进行系统登录

图 45

图 46

图 47
在电脑上使用鼠标复制本实验代码文件 image_canny(代码所在目录:Demo/Image_Processing/image_canny),然后在远程窗口中进入“主目录”文件夹,创建一个名字为 Demo 文件夹,使用鼠标粘贴功能即可把代码拷贝到 Demo 目录中,如下操作

图 48

图 49
使用的时候建议最大化远程窗口。
3.5.4 运行程序
在 Demo 目录下,使用鼠标右键启动终端窗口,执行以下命令,启动开发环境:

图 50
Target# jupyter lab

图 51
实验现象:
拷贝终端打印的网址,启动实验箱系统左上角浏览器,在网页输入:http://rk3588:8888/lab,即可打开登录界面 (根据实际IP地址修改网页地址)。输入密码:tronlong,登录。

图 52
在 jupyter lab 左边项目栏可看到本实验代码文件夹。(本次体验代码存放目录:Demo/Image_Processing/image_canny)

图 53
双击进入文件夹目录,再打开实验代码文件,可浏览和编辑实验代码

图 54
点击工具栏运行按钮运行实验代码:

图 55
实验现象:

图 56
实验结果解析:
代码运行结束后,代码窗口底部输出边缘检测效果图,通过修改代码高斯滤波或边缘检测函数阈值,验证边缘检测效果。
在系统终端通过组合键 Ctrl+c,输入 “y” 可退出 jupyter lab:

图 57
2447

被折叠的 条评论
为什么被折叠?



