问答
直播中

mao399498400

11年用户 48经验值
私信 关注

【Z-turn Board试用体验】+ 基于Z-turn的图像边缘检测系统(三)

本帖最后由 mao399498400 于 2015-7-7 20:41 编辑

算法流程设计
本算法利用了OpenCV提供了相关函数,实现了图像读取写入。其中Vivado HLS包含大量的视频库函数,当中的HLS OpenCV library可应用于Zynq系列中ARM处理器的任务中。HLS OpenCV Library是可综合的图像处理库,本算法中的OpenCV功能函数被HLS OpenCV Library视频库替换,实现读取功能,将其送入到加速模块中,进行边缘检测算法处理。处理后结果利用HLS OpenCV Library库函数进行写入。算法流程框图如所示。 2.png

接下来分模块介绍下里面的各个部分,首先是最重要的部分,sobel边缘检测(硬件加速模块)
Sobel算子主要用作边缘检测,在技术上,它是一离散性一阶差分算子,用来运算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量 。
Sobel卷积因子如图 3.png
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,由下式可见 4.png
图像的每一个像素的横向及纵向灰度值由式(1-2)结合来计算该点灰度的大小
5.png


通常,为了提高效率使用不开平方的近似值,由下式可见 6.png
如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。然后可用下式计算梯度方向:
7.png
完成对算法的解说后,接下来就要将用C语言写的算法用HLS高级综合工具综合
首先利用C语言将Sobel(索贝尔)算法描述出来[9],不难发现该算法核心内容就是将两个横向与纵向的3*3矩阵与原始图像进行卷积,你能够得到的横向和纵向亮度差分近似。其实这样的矩阵卷积非常适合采用FPGA进行加速。本设计充分利用了Xilinx(赛灵思)公司的新的高级综合工具HLS 将从C语言描述的源代码的水平创造了从C源代码提取RTL级的控制流和数据流。其中从从C代码中提取硬件的思路包括:
(1)在顶层,从C代码中提取控制和数据通道。
(2)在顶层控制流的一些点,将控制传递到子程序,让其能够并行地执行子程序。
(3)通过调度和绑定过程,HLS将C代码映射到硬件。
其中调度和绑定是HLS工具的核心,流程图如图 8.png

接着介绍图像采集读取模块
图像采集是一个采样和量化步长。这个过程是通过USB摄像头完成。这一过程通过USB摄像头完成。在Zynq上,由于内部运行的是Ubuntu12.04LTS系统,所以对摄像头的调用以及读取工作是通过Linnux底层的V4L2(Video for Linux)库的API完成的。但是V4L2库操作繁琐,涉及到很多参数配置以及系统函数调用操作,对UNIX系统编程不是很了解的人难以操作。幸运的是在OpenCV中提供了VideoCapture类来读取摄像头甚至视频。它隐去了V4L2的繁琐操作,只需要执行VideoCapture类中的open方法就可以开启摄像头,通过read方法就可以读摄像头,非常方便。



回帖(4)

中科院

2015-7-8 00:29:40
怎么感觉看过这篇文章,有似曾相识的感觉。还看到里面的图了
举报

mao399498400

2015-7-8 12:50:11
引用: 中科院 发表于 2015-7-8 00:29
怎么感觉看过这篇文章,有似曾相识的感觉。还看到里面的图了

所有图都是我自己用visio画的,保留原版本。当中介绍Sobel部分的理论是我摘录来的。
举报

徐鹏

2015-7-9 15:52:36
虚得很。。。。。。
举报

阿杰无心

2015-7-11 22:07:20
总结的非常好,希望早点把这个项目帖子都发出来
举报

更多回帖

发帖
×
20
完善资料,
赚取积分