Vitis Accelerated Libraries 学习笔记--Vision 库介绍

目录

1. 简介

2. 分类介绍

2.1 图像容器

2.2 图像处理基础

2.3 图像滤波和平滑

2.4 图像变换和增强

2.5 图像分析和特征检测

2.6 数学和算术操作

2.7 图像校正和优化

2.8 颜色和阈值处理

2.9 高级图像处理

2.10 光流和运动估计

2.11 图像转换和映射

2.12 其他特殊功能

3. 总结


1. 简介

Vitis Vision 库是一组 90 多个内核,基于 OpenCV 计算机视觉库,针对 FPGA、AI-E 进行了优化。这个库的主要功能包括:

  • 色彩和位深转换:能够进行图像的色彩空间转换和位深度调整。
  • 像素算术运算:执行像素级别的算术操作,如加、减、乘、除等。
  • 几何变换:包括旋转、缩放、仿射变换等。
  • 统计:计算图像的统计数据,如直方图、均值、标准差等。
  • 滤波器:应用各种滤波器进行图像平滑、锐化等处理。
  • 特性检测和分类器:用于图像特征的检测和分类。
  • 3D 重建:从图像数据中重建三维场景。

2. 分类介绍

2.1 图像容器

在 Vitis Vision Library 中,xf::cv::Array2xfMat() 和 xf::cv::xfMat2Array() 这两个函数是为了方便开发者在常规的 C/C++ 指针数组和 Vitis Vision 的 xf::cv::Mat 图像容器类之间转换数据而设计的。

这里的 xf::cv::Mat 是一个特殊的图像容器,用于在硬件加速中处理图像数据。它类似于 OpenCV 中的 cv::Mat,但专门为硬件优化而设计。

下面是一个简化的例子,展示了如何在顶级函数中使用这些适配器函数:

extern "C" {
void func_top (ap_uint *gmem_in, ap_uint *gmem_out, ...) {// 定义输入和输出的 xf::cv::Mat 对象xf::cv::Mat<...> in_mat(...), out_mat(...);// HLS 数据流指令,用于优化数据路径#pragma HLS dataflow// 将输入数据从指针数组转换为 xf::cv::Mat 格式xf::cv::Array2xfMat<...> (gmem_in, in_mat);// 执行某个 Vitis Vision 函数,处理图像数据xf::cv::Vitis Vision-func<...> (in_mat, out_mat...);// 将处理后的数据从 xf::cv::Mat 格式转换回指针数组xf::cv::xfMat2Array<...> (gmem_out, out_mat);
}
}

此例中:

  • func_top 是内核的 top 层函数,是硬件执行的入口点。
  • gmem_in 和 gmem_out 是指向全局内存的指针,用于输入和输出数据。
  • #pragma HLS dataflow 是一个编译指示,以优化数据流。
  • Array2xfMat 将输入数据从指针数组转换为 xf::cv::Mat 格式,这样就可以在硬件中高效处理。
  • Vitis Vision-func 是一个占位符,代表任何 Vitis Vision Library 中的函数,用于执行图像处理任务。
  • xfMat2Array 将处理后的图像数据从 xf::cv::Mat 格式转换回指针数组,以便进一步处理或存储。

这样的设计使得开发者可以利用 Vitis Vision Library 中的高性能图像处理函数,同时保持与传统 C/C++ 程序的兼容性。

数据从 OpenCV 的 cv::Mat 格式显式复制到 Vitis Vision 的 xf::cv::Mat 格式。xf::cv::Mat 是专门为硬件加速设计的图像容器,它能够确保数据在 FPGA 的本地内存中连续存储,从而提高性能。处理完成后,xf::cv::Mat 中的输出数据再被复制回 cv::Mat,以便在主机上进行进一步的处理或存储。

2.2 图像处理基础

功能:

  • 基础数据类型和图像容器:定义图像数据结构,实现图像的读取、写入和基本操作。
  • 像素级并行处理:利用并行处理技术加速图像处理任务。

具体函数:

  • Data Types
  • xf::cv::Mat Image Container Class
  • Pixel-Level Parallelism
  • xf::cv::imread
  • xf::cv::imwrite
  • Crop
  • Flip
  • Rotate
  • Delay
  • Duplicate
  • Set
  • Zero

2.3 图像滤波和平滑

功能:

  • 滤波和平滑:减少图像噪声,平滑图像边缘,改善图像质量。

具体函数:

  • Bilateral Filter
  • Box Filter
  • Gaussian Filter
  • Median Blur Filter
  • Mode filter

2.4 图像变换和增强

功能:

  • 图像变换:包括颜色空间转换、图像旋转、翻转等,用于图像预处理和增强。
  • 图像增强:通过调整图像的对比度、亮度等,改善图像的视觉效果。

具体函数:

  • Bit Depth Conversion
  • Color Conversion
  • CUSTOM BGR2Y8
  • Degamma
  • Gamma Correction
  • Global Tone Mapping
  • Local Tone Mapping
  • Look Up Table
  • RGBIR to Standard Bayer Format

2.5 图像分析和特征检测

功能:

  • 特征检测:识别和提取图像中的关键特征,如边缘、角点、直线等,为图像分析和理解提供基础。

具体函数:

  • Canny Edge Detection
  • FAST Corner Detection
  • Harris Corner Detection
  • Histogram Computation
  • HOG
  • HoughLines
  • Integral Image

2.6 数学和算术操作

功能:

  • 数学运算:实现图像的基本数学和算术操作,如加减乘除、逻辑运算等,用于图像数据的处理和分析。

具体函数:

  • Absolute Difference
  • Accumulate
  • Accumulate Squared
  • Accumulate Weighted
  • AddS
  • Add Weighted
  • Bitwise AND
  • Bitwise NOT
  • Bitwise OR
  • Bitwise XOR
  • Max
  • MaxS
  • Min
  • MinS
  • MinMax Location
  • Pixel-Wise Addition
  • Pixel-Wise Multiplication
  • Pixel-Wise Subtraction
  • SubRS
  • SubS
  • Sum

2.7 图像校正和优化

功能:

  • 校正和优化:纠正图像的畸变和色彩偏差,优化图像质量,提高分析的准确性。

具体函数:

  • Auto Exposure Correction
  • Auto White Balance
  • Bad Pixel Correction
  • Blacklevelcorrection
  • Color correction matrix
  • Demosaicing
  • Gaincontrol
  • Lens Shading Correction
  • Paint Mask
  • 形态学操作
  • Dilate
  • Erode

2.8 颜色和阈值处理

功能:

  • 形态学处理:通过膨胀、腐蚀等操作处理图像结构,用于提取图像形状和结构信息。

具体函数:

  • Clahe
  • Color Thresholding
  • Histogram Equalization
  • InRange
  • Otsu Threshold
  • Thresholding

2.9 高级图像处理

功能:

  • 颜色处理和阈值分割:基于颜色和灰度值进行图像分割和分类,用于图像前景和背景的区分。

具体函数:

  • Brute-force (Bf) Feature Matcher
  • Custom CCA
  • Custom Convolution
  • Distance Transform Feature Matcher
  • Extract Exposure Frames
  • HDR Decompanding
  • HDR Merge
  • Mean Shift Tracking
  • Semi Global Method for Stereo Disparity Estimation
  • Stereo Local Block Matching
  • SVM

2.10 光流和运动估计

功能:

  • 特征匹配和图像合成:进行图像之间的特征匹配,实现高动态范围(HDR)图像合成,提供高级图像分析能力。

具体函数:

  • Dense Pyramidal LK Optical Flow
  • Dense Non-Pyramidal LK Optical Flow
  • TVL1 Optical Flow

2.11 图像转换和映射

功能:

  • 运动估计:通过光流技术估计图像序列中物体或场景的运动,用于视频分析和监控。

具体函数:

  • convertScaleAbs
  • convertTo
  • Remap
  • Resolution Conversion (Resize)
  • Warp Transform

2.12 其他特殊功能

功能:

  • 特殊处理和优化:提供一系列特殊功能,如3D查找表(LUT)、边界框检测、通道合并分离等,用于特定应用需求。

具体函数:

  • 3D LUT
  • BoundingBox
  • Channel Combine
  • Channel Extract
  • Compare
  • CompareS
  • InitUndistortRectifyMapInverse
  • ISP Stats
  • Kalman Filter
  • Laplacian Operator
  • Mean and Standard Deviation
  • Preprocessing for Deep Neural Networks
  • Pyramid Up
  • Pyramid Down
  • Quantization & Dithering
  • Reduce
  • Scharr Filter
  • Sobel Filter
  • Atan2
  • Inverse (Reciprocal)
  • Square Root

3. 总结

Vitis Vision 库为基于 FPGA 和 AI 引擎的计算机视觉应用提供了强大的支持。它通过一系列优化的内核,覆盖从基本的图像处理操作到高级的图像分析和特征检测。开发者可以利用这些内核来执行色彩转换、像素运算、几何变换等任务,同时享受硬件加速带来的性能优势。Vitis Vision 的设计允许开发者在保持与传统 C/C++ 程序兼容的同时,使用高性能的图像处理函数。这个库的多样性和灵活性使其成为在现代图像处理和机器视觉领域中不可或缺的工具,特别是在需要处理大量数据和实时性要求高的应用场景中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Media Framework(八)OMXNodeInstance - Ⅰ

OpenMAX框架的学习有两大难点&#xff0c;一是组件的状态切换与buffer的流转过程&#xff0c;这部分内容我们已经在IL Spec中学习过了&#xff1b;二是OMX组件使用的buffer类型与buffer分配过程&#xff0c;这一节我们来重点剖析OMX组件使用的buffer类型。 1、引言 在实际应用…

业务架构交付物

背景 业务的核心元素、扩展元素以及它们的协同关系&#xff0c;业务架构和其他架构的关系等等已经有了不少认识&#xff0c;那么&#xff0c;通过对业务架构的还原和分析&#xff0c;到底能够得到什么业务架构的内容呢&#xff1f;它可以是一套流程框架体系&#xff0c;也可以…

探索约束LLM输出JSON的应用

0、 引言 JSON&#xff08;JavaScript Object Notation&#xff09;因其简洁、易读和易于解析的特性&#xff0c;已成为全球使用最广泛的数据交换格式之一。它能够满足各种数据交换需求&#xff0c;特别是在构建人工智能驱动的应用程序时&#xff0c;工程师们经常需要将大型语…

深度学习工具|LabelImg(标注工具)的安装与使用教程

1 简介 Label是一款免费的图像标注软件&#xff0c;可以以矩形框的形式对图像中的物体进行标记&#xff0c;常用于分类和目标检测。并可以将标记信息保存为PasclVOC&#xff08;xml&#xff09;、YOLO&#xff08;txt&#xff09;、CreateML&#xff08;json&#xff09;格式。…

Python中对含有转义字符的变量,如何处理

file_path C:\Users\EDY\PJ-IPAStudio\designer\project 这是一个路径的字符串&#xff0c;要访问这个路径下的文件&#xff0c;是会报错的 file_path rC:\Users\EDY\PJ-IPAStudio\designer\project 需要在前面添加 r 如果他是一个变量&#xff0c;如何对变量里的字符修改呢&…

0802功放2

功放要记一般的式子&#xff0c;而非最大的式子&#xff0c;因为总不能总开到最大音量上工作&#xff0c;而是在比较合适的音量上工作 运放的最大电压也是比电源低1~2V 饱和三极管的功率&#xff0c;电流越大&#xff0c;饱和压降越大&#xff1f;&#xff1f;&#xff1f;不…

STM32G474的浮点数四则运算速度实测

一、FPU的启用 FPU 即浮点运算单元&#xff08;Float Point Unit&#xff09;。浮点运算&#xff0c;对于定点 CPU&#xff08;没有 FPU 的 CPU&#xff09;来说必须要按照 IEEE-754 标准的算法来完成运算&#xff0c;是相当耗费时间的。而对于有 FPU 的 CPU来说&#xff0c;浮…

【Golang】Steam 创意工坊 Mod 文件夹批量重命名

本文将介绍一个使用Go语言编写的脚本&#xff0c;其主要功能是解析XML文件并基于解析结果重命名文件夹。这个脚本适用于需要对文件夹进行批量重命名&#xff0c;并且重命名规则依赖于XML文件内容的情况。 脚本功能概述 Steam创意工坊下载的Mod文件夹批量重命名为id名称 运行前…

Tomcat get请求传数组集合参数

前言 最近做项目&#xff0c;需要通过GET传参&#xff0c;来实现查询的能力&#xff0c;本来是RPC调用&#xff0c;直接参数序列化即可。但是服务最近修改为HTTP&#xff0c;本来Spring Cloud的feign也可以直接传参数&#xff0c;但是当使用Nginx访问时参数到底传啥呢&#xf…

iOS Swift5 视频播放

文章目录 1.截图2.代码3.导入本地文件 1.截图 2.代码 import UIKit import AVKit import AVFoundationclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor .white// 创建按钮let button UIButton(type: .syste…

【学习】程序员资源网站

1 书栈网 简介&#xff1a;书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站&#xff0c;在书栈网你可以找到很多书籍、笔记资源。在这里&#xff0c;你可以根据热门收藏和阅读查看大家都在看什么&#xff0c;也可以根据技术栈分类找到对应模块的编程资源&#xff0c;…

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法(以太网)

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法(以太网) 具体连接伺服驱动器的步骤可参考以下内容: 启动InoDriverShop, 新建或打开工程 如下图所示,选择在线,选中SV660F图标,右侧通信类型选择“TCP—DCP”,点击下一步,同时要选择自己当前使用的网卡…

【扩散模型(一)】Stable Diffusion中的重建分支(reconstruction branch)和条件分支(condition branch)

Stable Diffusion 是一种基于扩散模型的生成模型&#xff0c;用于生成图像等数据。在解释 Stable Diffusion 的过程中&#xff0c;经常会提到两个主要的分支&#xff1a;重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xf…

C++多线程异步日志实现

使用C11标准&#xff0c;构建了一个方便使用的、轻量化的日志系统。封装线程安全的lockQueue&#xff0c;实现对每条日志添加信息、push到lockQueue中的LogTmp类&#xff0c;实现一个多线程异步的日志系统Logger。 lockqueue.h #pragma once #include <queue> #include…

Go微服务: redis分布式锁保证数据原子操作的一致性

概述 随着云计算和大数据技术的飞速发展&#xff0c;分布式系统已经成为现代IT架构的重要组成部分在分布式系统中&#xff0c;数据的一致性是一个至关重要的挑战&#xff0c;特别是在并发访问和修改共享资源的场景下分布式锁是一种跨进程、跨机器节点的互斥锁&#xff0c;用于…

如何模拟一个具有网络管理功能的被测件的一些思路

不知道大家有没有遇到过这个问题&#xff1f; 当我们在学习如何测试网络管理时&#xff0c;难题不在于如何编写测试脚本&#xff0c;而是编写完测试脚本后&#xff0c;没有真实被测件来让我们执行测试脚本&#xff0c;进而调试脚本。这也是我在给大家讲CANoe工具和CAPL编程语言…

08.QT控件:QWidget

一、Widget 简介 Widget 是 Qt 中的核⼼概念.。英⽂原意是 "小部件"&#xff0c;我们此处也把它翻译为 "控件"。控件是构成⼀个图形化界⾯的基本要素。 Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件。并且 Qt 也提供了 "⾃定义控件" 的…

《第一行代码 第3版》学习笔记——第十一章 网络技术

1 webview用法 class MainActivity : ComponentActivity() {SuppressLint("SetJavaScriptEnabled")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {NetWorkDemoTheme {// A surface container using the bac…

AI如何让办公更智能?WPS AI海外版给出答案

导读&#xff1a;从语义检查到一键生成PPT&#xff0c;WPS Office海外版如何面向2亿月活用户快速推出AI功能&#xff1f; 近日&#xff0c;WPS Office海外版应用亚马逊云科技Amazon Bedrock等生成式AI技术与服务&#xff0c;在海外正式推出人工智能应用WPS AI海外版&#xff0c…

Postman测试,如何保持用户登录状态?

为了在Postman中保持用户登录状态&#xff0c;我们可以使用以下步骤&#xff1a; 1. 下载和安装Postman 首先&#xff0c;我们需要下载和安装Postman。Postman是一个流行的API开发和测试工具&#xff0c;可以帮助我们发送HTTP请求并测试API的功能。 2. 创建一个新的Postman …