- 本实验仅供参考学习,涉及的所有软件在文中均给出了下载地址,按照本文流程可执行其他类似的硬件加速项目。
- 若需要执行本实验中所用到的项目文件,请向cucdlh@163.com发送请求,并说明用途。
- 博主水平有限,若有错误欢迎指正,欢迎交流。
一 实验介绍
本实验实现了车道检测的功能,并基于FPGA实现硬件加速。具体而言,本实验基于边缘检测和霍夫变换的基本原理,使用De10-Nano开发板,通过OpenCL框架实现检测的运算加速。
设计的整体框架如下图所示,该OpenCL项目包括OpenCL Kernel(OpenCL内核)和Host Program(主机程序),内核是SoC FPGA的FPGA部分实现的,是在Quartus中开发的,要求Windows/Linux系统中安装有OpenCL SDK;主机程序并不是SoC FPGA的ARM部分,而是在安装了Intel SoC EDS的Windows/Linux系统上交叉编译的。本实验基于Windows 64。

二 原理介绍
边缘检测部分(edgedetect函数)
边缘检测部分使用了经典的Canny边缘检测算法,包括以下几个步骤:
-
灰度转换:将输入的RGB图像转换为灰度图像。
-
高斯模糊:对灰度图像进行高斯模糊,以减少噪声。
-
Sobel算子:计算图像的梯度,找出图像中的边缘。
-
非极大值抑制:通过比较像素点的梯度方向,抑制非极大值点,保留边缘的细节。
-
双阈值检测:通过设置高低阈值,确定强边缘和弱边缘,并进行边缘连接。
霍夫变换部分(hough 函数)
霍夫变换是一种用于检测图像中几何形状(如直线、圆等)的技术,基本原理为:
-
在图像空间中,一条直线可以表示为 y = kx + b;
-
在霍夫空间中,直线可以表示为 rho = x * cos(theta) + y * sin(theta),其中 rho 是直线到原点的距离,theta 是直线的角度;
-
通过遍历图像中的每个边缘点,计算其在霍夫空间中的 rho 和 theta,并在累加器数组中进行投票。最终,累加器中的峰值对应于图像中的直线。
基于De10-Nano-OpenCL实现硬件加速
-
De10 - Nano 是一款基于 FPGA(现场可编程门阵列)的开发板。
-
OpenCL是一个开放的、跨平台的并行编程框架,允许开发者使用高级编程语言(如 C、C++)来编写可以在异构计算平台(包括 CPU、GPU、FPGA 等)上运行的程序。
-
FPGA 内部的逻辑单元可以同时处理多个数据,,可以同时对矩阵的多个元素进行乘法和加法运算,极大地加快了运算速度。
三 实验过程
提醒:需要提前准备一块De10-Nano的开发板
1 软件安装
-
Intel FPGA SDK for OpenCL Prime Edition 18.1.0.625:OpenCL开发工具,提供OpenCL编写、编译、调试等所需的工具和库。
-

最低0.47元/天 解锁文章
466

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



