【Z-turn Board试用体验】+ 基于Z-turn的图像边缘检测系统(三) - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【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库函数进行写入。算法流程框图如所示。

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


通常,为了提高效率使用不开平方的近似值,由下式可见
如果梯度G大于某一阀值 则认为该点(x,y)为边缘点。然后可用下式计算梯度方向:

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

接着介绍图像采集读取模块
图像采集是一个采样和量化步长。这个过程是通过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
总结的非常好,希望早点把这个项目帖子都发出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-11-27 22:51 , Processed in 0.619728 second(s), Total 62, Slave 45 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表