目录

  • 一、sobel边沿检测原理
  • 二、HLS方案实现sobel边沿检测
  • 三、HLS在线仿真并导出IP
  • 四、Kintex7开发板vivado工程验证
  • 五、zynq7100开发板vivado工程验证
  • 六、板级调试验证
  • 七、福利:工程源码获取

一、sobel边沿检测原理

所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。边缘存在于目标、背景和区域之间,所以,它是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要的特征。
边缘检测和区域划分是图像分割的两种不同的方法,二者具有相互补充的特点。在边缘检测中,是提取图像中不连续部分的特征,根据闭合的边缘确定区域。而在区域划分中,是把图像分割成特征相同的区域,区域之间的边界就是边缘。由于边缘检测方法不需要将图像逐个像素地分割,因此更适合大图像的分割。边缘大致可以分为两种,一种是阶跃状边缘,边缘两边像素的灰度值明显不同;另一种为屋顶状边缘,边缘处于灰度值由小到大再到小的变化转折点处。边缘检测的主要工具是边缘检测模板。边缘检测的有很多,典型的有索贝尔算子、普里维特算子、罗伯茨交叉边缘检测等边缘检测技术,在设计中采用的是索贝尔算子。
索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。Sobel 卷积因子为:

该算子包含两组 3x3 的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向
的亮度差分近似值。如果以 A 代表原始图像,Gx 及 Gy 分别代表经横向及纵向边缘检测的图像灰度值,
其公式如下:

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

通常,为了提高效率 使用不开平方的近似值,但这样做会损失精度,迫不得已的时候可以如下这样子:

如果梯度 G 大于某一阀值,则认为该点(x,y)为边缘点。

二、HLS方案实现sobel边沿检测

在前面的sobel边沿检测原理中详细介绍了sobel边沿检测的算法公式,看起来很复杂很NB对吧?
然并卵!!!!!!!
然并卵!!!!!!!
然并卵!!!!!!!
因为对于HLS来说,干这活儿只需要一句话一行代码即可实现;
因为Xilinx早就帮你做好了sobel边沿检测的库,并且可以综合,既然如此,我还需要去管他怎么实现的,算法公式是怎样的吗?这就是HLS的NB之处。。。
HLS工程如下:

综合后的延时、资源占用等性能参数如下:


头文件如下:

#ifndef _HELAI_HLS_SOBEL_H
#define _HELAI_HLS_SOBEL_H#include "hls_video.h"#define MAX_HEIGHT 1080//图像最大高度
#define MAX_WIDTH  1920//图像最大宽度#define INPUT_IMAGE        "luoli.jpg"
#define OUTPUT_IMAGE       "luoli_hls.jpg"typedef hls::stream<ap_axiu<24,1,1,1> > AXI_STREAM;
typedef hls::Mat<MAX_HEIGHT,MAX_WIDTH,HLS_8UC3> RGB_IMAGE;
typedef hls::Mat<MAX_HEIGHT,MAX_WIDTH,HLS_8UC1> GRAY_IMAGE;void helai_hls_sobel(AXI_STREAM&INPUT_STREAM,AXI_STREAM&OUTPUT_STREAM,int rows,int cols);
#endif

源文件的核心代码如下:

hls::Sobel<1,0,3>(img_1,img_2);   //将灰度数据与Sobel算子卷积

核心代码就一句话,BN吧?呵呵。。。。。。

三、HLS在线仿真并导出IP

仿真源文件如下:

#include "helai_hls_sobel.h"
#include "hls_opencv.h"int main(void)
{//获取图像数据IplImage* src = cvLoadImage(INPUT_IMAGE);IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);//使用HLS库进行处理AXI_STREAM src_axi,dst_axi;IplImage2AXIvideo(src,src_axi);helai_hls_sobel(src_axi,dst_axi,src->height,src->width);AXIvideo2IplImage(dst_axi,dst);//保存图像cvSaveImage(OUTPUT_IMAGE,dst);//显示图像cvShowImage(INPUT_IMAGE,src);cvShowImage(OUTPUT_IMAGE,dst);//等待用户按下键盘上的任一按键cv::waitKey(0);
}

话不多说直接看HLS仿真结果:


仿真完整成功后即可综合再导出IP:


四、Kintex7开发板vivado工程验证

开发板:Xilinx Kintex7开发板;
开发环境:HLS2019.1;vivado2019.1;
输入:OV5640摄像头,输入分辨率1280x720;
输出:HDMI,输出分辨率1920x1080;
工程BD如下:

生成顶层RTL如下:

SDK主函数源码如下:

#include <stdio.h>
#include "xgpio.h"
#include "oak_iic.h"
#include "unistd.h"
#include "helai_vdma.h"
#include "helai_color_back.h"
#include "helai_hls_sobel.h"XGpio_Config *XGpioCfg;
XGpio led_gpio;#define AXI_GPIO_DEVICE_ID    XPAR_GPIO_0_DEVICE_IDint main(){XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);XGpio_CfgInitialize(&led_gpio, XGpioCfg, XGpioCfg->BaseAddress);XGpio_SetDataDirection(&led_gpio, 1, 0);   //outputXGpio_DiscreteWrite(&led_gpio, 1, 0);oak_i2c_init(OV5640_IIC_BASEADDR, 1000000, 0x78>>1, IIC_REG_LEN16, IIC_DATA_LEN8);OV5640_Init(OV5640_IIC_BASEADDR,1280,720);helai_hls_sobel(720,1280);helai_vdma();while(1){usleep(500000);XGpio_DiscreteWrite(&led_gpio, 1, 1);usleep(500000);XGpio_DiscreteWrite(&led_gpio, 1, 0);}
}

五、zynq7100开发板vivado工程验证

开发板:Xilinx zynq7100开发板;
开发环境:HLS2019.1;vivado2019.1;
输入:OV5640摄像头,输入分辨率1280x720;
输出:HDMI,输出分辨率1920x1080;
工程BD如下:

生成顶层RTL如下:

SDK主函数源码如下:

#include "I2C_16bit.h"
#include "xiicps.h"
#include "xil_io.h"
#include "xparameters.h"
#include "helai_vdma.h"
#include "helai_hls_sobel.h"void main()
{// Initialize OV5640 regesiterI2C_config_init();helai_hls_sobel(720,1280);helai_vdma();while (1) ;
}

六、板级调试验证

K7开发板和zynq开发板实物连接如下:图中K7为连接状态

运行结果静态展示:

下载程序后运行结果如下:以K7开发板为例,持续运行48小时无问题

HLS图像处理sobel

七、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料如下:获取方式:私,或者文章末尾的V名片。
K7开发板网盘资料如下:

zynq开发板网盘资料如下:

FPGA图像处理HLS实现sobel边沿检测,提供HLS工程和vivado工程源码相关推荐

  1. FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码

    目录 一.图像RGB转灰度原理 二.HLS方案实现 三.HLS在线仿真并导出IP 四.Kintex7开发板vivado工程验证 五.zynq7100开发板vivado工程验证 六.板级调试验证 七.福 ...

  2. FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.vivado工程1--彩条视 ...

  3. FPGA实现MPEG2视频压缩 提供工程源码和技术支持

    1.前言 MJPEG.MPEG2.MPEG4.H264 是流行且兼容性很高的 4 种视频编码格式.其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差. MPEG ...

  4. FPGA驱动FT601实现USB3.0相机HDMI视频采集 提供工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.详细设计方案 5.vivad ...

  5. FPGA驱动silicon9011和silicon9134完成HDMI收发,提供工程源码和技术支持

    目录 1.HDMI输入输出设计框架 2.silicon9011/9013芯片详解及配置 3.silicon9134芯片详解及配置 4.FPGA工程介绍 5.上板调试验证 6.福利:工程源码获取 1.H ...

  6. FPGA HLS双线性插值图像缩放视频拼接,上板验证稳定通过,提供3套工程源码和技术支持

    目录 1.前言 2.HLS实现双线性插值图像缩放 3.vivado工程1:1080P缩小720P 4.vivado工程2:1080P缩小后mixer二分频 5.上板调试验证并演示 6.福利:工程代码的 ...

  7. FPGA基础入门篇(四) 边沿检测电路

    FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...

  8. FPGA找工作写简历,你离高薪offer只差一个高端项目,提供工程源码和技术支持

    这里写目录标题 1.前言 2.你或许很菜 3.工程源码 4.技术支持 5.工程源码和技术支持获取方式 1.前言 如果你是即将毕业的学生或是想转行做FPGA的工程师,你都会面临一个问题,那就是找工作,找 ...

  9. FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

    目录 1.前言 2.目前主流的FPGA图像缩放方案 3.本方案的优越性 4.详细设计方案 5.vivado工程详解 6.上板调试验证并演示 7.福利:工程源码获取 1.前言 代码使用纯verilog实 ...

最新文章

  1. linux ico图标大小,带、你了解ico图标文件格式
  2. java 之 学习过程中遇到的大佬博客
  3. 多项式乘法c语言,急!!!!c语言:求n次多项式的加法和乘法
  4. phpMyAdmin import.php 跨站脚本漏洞
  5. 1.两个VLAN通过两个交换机与路由器的通信
  6. 根据ip地址获得天气预报
  7. 【6】nagios从零学习使用 - centreon发送邮件报警
  8. linux初始化进程ppid号,linux基础(十一)--系统初始化的简谈
  9. Django congtent types应用
  10. iphone屏蔽系统更新_iOS13屏蔽系统更新升级教程
  11. 获取屏幕的宽高 android,Android获取屏幕宽高的方法
  12. Oracle——集合运算
  13. 配置Voice vlan
  14. 探讨 .NET 语言的 using statement 与资源释放
  15. Hive报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
  16. 区块链测试 以太坊 truffle是什么 怎么用
  17. 梅创社c语言课本答案解析,c语言程序设计第2版) 教学课件 作者 梅创社答案 第一章答案.docx...
  18. 微信emoji表情编码 、MySQL 存储 emoji 表情符号字符集
  19. java读取txt文件内容
  20. web前端基础 html5+css3(七.PS切图与项目实战(学成在线))

热门文章

  1. 计算机网络配置——路由器的配置
  2. 超简单制作多系统启动U盘教程
  3. 多轴控制玻璃行业程序 相机 ST LAD SFC
  4. SSH密钥登录系统报错Permissions 0644 for ‘xxx‘ re too open
  5. C语言零碎知识点之定义指针时星号靠近类型名还是变量名
  6. python通达信5分钟转,10分钟,15分钟,30分钟,60分钟,量化交易,K线
  7. API NetUserChangePassword Did yer sd1
  8. android QVGA WQVGA HVGA VGA WVGA各个分辨率的区别
  9. java系统开发注意事项
  10. html5设置app启动页,使用Ken Burns Effect制作App启动页