Openvx文档阅读一

OpenVX Framework Objects

官方文档中共定义了以下几种OpenVX的框架对象

  1. Context:context表示所有OpenVX对象的对象域。所有的数据对象以及所有框架对象都存在于上下文中。
  2. Kernel:OpenVX中的Kernel表示对一个计算机视觉功能的抽象表示,如“Sobel梯度”或“Lucas Kanade特征跟踪”。
  3. Parameter:传递给计算机视觉函数的抽象输入或者输出的数据对象。该对象包含kernel描述中该参数用法的签名。这些信息包括:
    Signature Index - The numbered index of the parameter in the signature.
    Object Type - e.g. VX_TYPE_IMAGE, or VX_TYPE_ARRAY, or some other object type from vx_type_e.
    Usage Model - e.g. VX_INPUT or VX_OUTPUT.
    Presence State - e.g. VX_PARAMETER_STATE_REQUIRED, or VX_PARAMETER_STATE_OPTIONAL.
  4. Node:一个node就是kernel的一个实例,node与特定的引用(参数)配对。node仅从单个graph创建并且关联起来。当一个vx_paramter从一个Node中被提取出来时,一个附加的属性可以被访问:Reference-从节点创建函数(例如vxSobel3x3Node)中分配给该参数索引的vx_reference。
  5. Graph:以有向不连接的方式连接的一组节点。一个图可能具有同一图中的其他节点集不相连的节点集。

OpenVX Data Object

Data objects are object that are processed by graphs in nodes.

  1. Array:不透明数组对象,可以是基本数据类型数组或者结构数组。
  2. Convolution:n opaque object that contains an M × N matrix of vx_int16 values. Also contains a scaling factor for normalization. Used specifically with vxuConvolve and vxConvolveNode.
  3. Delay:一个不透明的对象,包含手动控制的、时间延迟的对象列表。
  4. Distribution:包含频率分布(如直方图)的不透明对象。
  5. Image:一个不透明的映像对象,可能是vx_df_image_e中的某种格式。
  6. LUT:一个与vxTableLookupNode和vxuTableLookup一起使用的不透明查找表格对象。
  7. Matrix:一个不透明的对象,它包含一个标量值的M × N矩阵。
  8. …详情参考官方文档中2.6

Graphs Concepts

graph是OpenVX中的核心概念。使用图来表达计算机视觉问题的目的是允许任何实现最大化其优化潜力的可能性,因为图的所有操作及其依赖在图被处理之前都是提前知道的。图由一个或多个节点组成,这些节点通过节点创建函数添加到图中。OpenVX中的图形必须在处理时间之前创建,并由实现进行验证,之后它们可以根据需要进行多次处理。

Linking Nodes

图节点通过数据依赖关系链接在一起,没有显式的顺序。同样的引用可以链接到其他节点。然而,链接有一个限制,即图中只有一个节点可以输出到任何特定的数据对象引用。也就是说,在给定的图中只能存在一个对象的写入器。这防止了数据依赖关系的不确定排序。在任何读取数据的读者访问该数据之前,图中的所有写入器都必须生成输出数据。

Virtual Data Objects

OpenVX中的图形依赖于数据对象来链接节点,当OpenVX的客户端知道它们不需要访问这些中间数据对象时,它们可能被创建为虚拟的。可以以与非虚拟数据对象相同的方式使用虚拟数据对象来将图的节点连接在一起。
详见2.8.2

Node Parameters

节点创建函数的参数可以定义为atomic类型的,如vx_int32、vx_enum,也可以定义为对象类型,如vx_scalar、vx_image。节点创建函数的atomic变量可以被框架转换为vx_scalar引用以供节点使用。vx_scalar类型的节点参数可以在图执行期间被修改;然而,atomic类型的节点参数如果发生修改,需要至少验证一次graph。所有的节点参数对象都可以通过以下方式修改:通过vxGetParameterByIndex检索vx_paramter的索引,然后将其传递给vxQueryParameter以获取对对象的引用。
vx_paramter param = vxGetParamterByIndex(node,p);
vx_reference ref;
vxQueryParameter(param,VX_PARAMETER_REF,&ref,sizeof(ref));

如果函数的类型未知,可以使用相同的函数检索。

vx_enum type;
vxQueryParamter(param,VX_PARAMETER_TYPE,&type,sizeof(type));

Graph Parameters

graph上的参数是由图的作者定义的,使用vxAddParameterToGraph将每个graph参数定义为来自graph中的节点的特定参数。

Execution Model

图必须在以下两种情况下执行:
同步阻塞模式(在这种模式下,vxProcessGraph将阻塞直到图完成),并且在
异步的每个引用单问题模式(通过vxScheduleGraph和vxWaitGraph)。

Graph Formalisms

要使用图,必须设置一些规则以确定的执行图。processGraph(G)调用的行为由处理图G的结构决定。处理图是由一组节点N1…Nn和一组数据对象d1…di组成的二部图。图中的每条边(Nx,Dy)表示节点Nx写入的数据对象Dy,每条边(Dx,Ny)表示节点Ny读取的数据对象Dx

…待补充

回调

回调是一种控制图流和基于已完成的工作做出决策的方法。vx_AssignNodeCallback调用接收回调函数作为参数。该函数在特定节点执行之后但在图完成之前调用。如果节点被安排到独立的集合中,则回调函数的顺序是不指定的。由于数据依赖关系而已串行方式排列的节点按顺序执行回调。回调函数可以首先使用节点引用从节点中提取参数,然后提取数据引用。回调节点的数据输出在回调调用时必须是可用的(通过Map/Unmap/Copy方法)。

User Kernels

OpenVX支持客户端定义函数的概念,这些函数应该作为节点从图中执行,或者是在图内部执行。这个范例的目的是:

  • 进一步利用OpenVX平台内节点的独立操作。
  • 允许在OpenVX的其他地方重用组件化功能。
  • 形式化严格的验证要求(例如,契约编程)。

Parameter Validation

用户内核必须通过为它们实现的每个视觉功能提供显式的验证功能来帮助图验证工作。使用客户端提供的验证函数验证传递给用户内核实例节点的每个参数。客户端必须检查每个参数的属性和/或值:

  • 必须检查参数的每个属性或值。例如,数组的大小或范围内标量的值,或图像的维度约束(如宽度可分性)。(有些实现可能有限制,比如图像宽度可以被某个固定数字整除)。
  • 如果输出参数依赖于输入参数的属性或值,则必须检查这些关系。

Immediate Mode Functions

2.14 生命周期

OpenVX Context 生命周期

在这里插入图片描述

Graph生命周期

  • Construction-Grpah通过vxCreateGraph创建,节点通过数据对象连接在一起。
  • Verification-检查Graph的一致性、正确性和其他条件。可能会发生内存分配。
  • Execution-图通过vxProcessGraph或者vxScheduleGraph执行。在执行期间,数据可能由客户端或者其他一些外部机制更新。OpenVX的客户顿可以将输入数据的引用更改为一个图,但这可能需要检查vxIsGraphVirified再次验证该图。
  • Deconstruction-通过vxReleaseGraph。图中所有的节点被释放。

数据对象生命周期

OpenVX中所有的数据对象拥有相似的生命周期。所有的对象都是

  • 通过vxCreate创建或者通过vxGet方法从父对象中获得(如果是内部创建的)。
  • 根据需要在图形或者即时函数中使用。
  • 对象必须被vxRealease或者vxRealeaseContext(当所有的对象都被释放时)释放。
    OpenVX图像的生命周期
    这是一个使用OpenVX框架API的图像生命周期的例子。这也适用于改变了类型和函数名的其他数据类型。
    在这里插入图片描述

Host Memory Data Object Access Patterns

从OpenVX上检索的对象,本质上是2D的对象,例如vx_image,vx_matrix,vx_convolution,主机端访问这些内存区域的方式是定义良好的。OpenVX使用以行为主的存储(即列中的每个单元都是内存-与相邻的行单元相邻)。二维对象总是按照宽度和高度的表示法创建(使用vxCreateImage或者vxCreateMatrix),参数按照这个顺序。当使用声明大小的二维数组“C”中的这些结构时,用户必须提供与Create函数参数顺序相反的数组维度。这种布局确保在主机上以C语言进行行存储。还可以为矩阵数据分配一个指针,并且必须在这个row-major方法中建立索引。

由于接下来篇幅较长,放在下一篇中展示。
注:以上为对OpenVX官方文档第二章的翻译,翻译存在不准确的问题,请以官方文档为准。
官方文档链接:https://registry.khronos.org/OpenVX/specs/1.3.1/html/OpenVX_Specification_1_3_1.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenVX编程指南PDF是一本非常实用的指南,旨在为需要使用OpenVX库进行图像和视觉处理的开发人员提供指导。OpenVX是一个跨平台的高性能计算机视觉库,它可以让开发人员更轻松地构建图像,视频和视觉信号处理应用程序。 这本指南涵盖了从基础知识到高级应用程序的各种主题,包括OpenVX框架,数据结构,语法和算法。它还提供了有关如何在OpenVX中使用功能块,滤波和其他图像处理工具的详细说明。 无论您是计算机视觉领域的专业人员还是初学者,OpenVX编程指南PDF都可以帮助您更加深入地了解OpenVX,并掌握其基本原理和使用方法。通过仔细学习这些概念和技术,您可以更好地应用OpenVX编程,并将其用于您的项目中。 此外,OpenVX编程指南PDF还包含丰富的实例和代码,可以帮助您更好地理解OpenVX的各种概念和技术,并加快您的开发速度。总之,如果您需要学习OpenVX编程,那么这本指南是您的理想选择。 ### 回答2: OpenVX编程指南(PDF)是一份介绍OpenVX图像处理框架的指南。该框架是一个跨平台的、高度优化的库,旨在提供一系列的函数,使图像、视频和视觉算法的开发变得更加容易。OpenVX框架使用图形计算来加速算法,并提供许多特定领域的算法,包括图像识别、人脸识别、深度学习和目标跟踪等。它具有许多有点,包括简化了编程过程、提高了计算效率、减少了开发时间和硬件开销等。在OpenVX编程指南中,介绍了如何使用OpenVX API和使用OpenVX图形计算框架来构建高效的计算图。此外,该指南提供了丰富的示例代码和代码片段,以便读者可以更好地理解OpenVX API库的功能和使用方式。总之,OpenVX编程指南非常实用和有用,对于想要学习或掌握OpenVX框架的人来说,是一份必备的指南。 ### 回答3: OpenVX编程指南是一本详细的文档,用于指导OpenVX图像处理库的使用和编程。OpenVX库提供了一种高效的图像处理方法,可以帮助开发者轻松地实现复杂的图像处理算法。 这本编程指南包含了OpenVX库的各种特性、数据结构和函数的详细介绍。开发者可以通过这本指南了解OpenVX库的工作原理和实现方式,从而更好地了解如何使用OpenVX库来解决各种图像处理问题。 指南包括了大量的示例代码和详细的说明,使得开发者可以快速上手使用OpenVX库来编写图像处理应用程序。此外,指南中还提供了一些最佳实践和优化技巧,可以帮助开发者编写出更高效和可维护的代码。 总之,OpenVX编程指南是一本非常实用和详细的资料,可以帮助有志于使用OpenVX库开发图像处理应用程序的开发者快速掌握相关的知识和技能,从而更好地完成自己的工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值