OpenVX 数据对象
数据对象是由节点中的图处理的对象。
1)Object: Array
不透明的数组对象,可以是基元数据类型或结构的数组。
2)Object: Convolution
包含vx_int16值的M×N矩阵的不透明对象。还包含用于规范化的缩放因子。专门
用于vxuConvolve和vxConvolveNode。
3)Object: Delay
一个不透明的对象,包含手动控制的、临时延迟的对象列表。
4)Object: Distribution
包含频率分布(例如直方图)的不透明对象。
5)Object: Image
一个不透明的图像对象,可能是vx_df_image_e中的某种格式。
6)Object: LUT
与vxTableLookupNode和vxuTableLookup一起使用的不透明查找表对象。
7)Object: Matrix
一个不透明的对象,包含一些标量值的M×N矩阵。
8)Object: Pyramid
一个不透明的对象,包含多个级别的缩放vx_image对象。
9)Object: Remap
一个不透明对象,包含用于变换图像的源点到目标点的映射。
10)Object: Scalar
包含单个基元数据类型的不透明对象。
11)Object: Threshold
包含阈值设置的不透明对象。
12)Object: ObjectArray
一个不透明的数组对象,可以是OpenVX的任何数据对象(非数据类型)的数组,
Delay和ObjectArray对象除外。
13)Object: Tensor
不透明的多维数据对象。用于vxHOGFeaturesNode、vxHOGCellsNode和神经网络
扩展等功能。
2.2.7错误对象
错误对象是可能从其他对象返回的专用对象,当发生严重的平台问题(即内存不足或无法控制)。可能从其他对象创建者函数返回的专用对象。这些可以在创建这些对象时进行检查,但检查也可能延迟到其他API中使用或验证,实现必须返回适当的错误,以指示使用了无效的对象类型。
vx_<object> obj = vxCreate<Object>(context, ...);
vx_status status = vxGetStatus((vx_reference)obj);
if (status == VX_SUCCESS) {
// 目标是好的
}
图形概念
图形是 OpenVX 的核心计算概念。使用图形来表示计算机视觉问题,目的是允许任何实现的可能性,以最大限度地优化其潜力,因为图及其依赖项的所有操作,都是在处理图形前预先知道。
图形由添加到图形中的一个或多个节点组成并创建功能。OpenVX中的图形必须在处理时间前创建与实现后,需要多次处理。
1. 链接节点
图节点通过数据依赖关系链接在一起,没有明确的顺序。同一引用可以链接到其他节点。然而,链接有一个局限性,即图中只有一个节点可以输出到任何特定的数据对象引用。也就是说,在给定的图中可能只存在一个对象的单个写入器。这可以防止数据依赖项的不确定排序。图形中的所有编写器,都应在数据的任何读取器访问前,生成输出数据。
2.虚拟数据对象
OpenVX中的图形依赖于数据对象,并将节点链接在一起。当OpenVX的客户端知道不需要访问这些中间数据对象时,可能会被创建为虚拟的。虚拟数据对象可以以与非虚拟数据对象相同的方式,将图的节点链接在一起;然而,虚拟数据对象在以下方面不同。
1)不可访问
如果从Graph外部角度引用,通过虚拟函数创建对象,则不应成功调用映射/取消映射或复制API。从与虚拟对象属于同一图形的客户端定义节点中,可成功调用映射/取消映射或复制API,因为它们是图形内部的。
2)范围界定
虚拟数据对象的范围在创建它们的Graph中,不能在其范围之外共享。虚拟数据对象的数据内容的活动范围,仅限于单个图形执行。换言之,虚拟对象的数据内容是在图形执行前定义的,并且不应期望虚拟对象的任何数据,在应用程序的连续图形执行中被保留。
3)中间操作
虚拟数据对象应仅用于图形中的中间操作,因为API的客户端根本无法访问它们。
4)无标注或无格式
创建虚拟数据对象的标注和格式时,可能部分或完全未定义。例如,可以创建未定义或部分定义的维度(0x0、Nx0或0xN,其中N不为空)和/或不具有定义的格式(VX_DF_image_VIRT)的虚拟图像。虚拟对象在创建时的未定义属性是关于图定义的实现,并且在图验证时是可变的;将在每次图形验证时自动调整,从输出虚拟对象的节点推导出来。在虚拟对象创建时,定义良好的维度和格式属性是不可变的,并且不能在图形验证时自动调整。
5)属性
即使给定的虚拟数据对象没有完全定义维度或格式,这些属性仍可能被查询。如果在对象参与图形验证前进行查询,则返回的属性值是用户提供的值(例如,维度的0)。如果在图形验证(或重新验证)后查询,返回的属性值将是图形验证规则确定的值。
虚拟数据的无量纲或无格式是一种允许创建与维度,或格式相关的通用图形的商品,但有一些限制:
(1)当无法从虚拟输出对象的其他参数推导出虚拟输出对象时,节点可能需要为其定义大小和/或格式。例如,缩放节点要求输出图像具有定义良好的大小,而颜色转换和通道组合节点,则要求输出图像采用定义良好的格式。
(2)从ROI创建的图像必须始终定义良好(vx_rectangle_t参数),并且不能从无量纲虚拟图像创建。
(3)无格式虚拟图像的ROI不应该是节点输出。
(4)从视觉创建的张量必须始终定义良好,不能从无量纲虚拟张量创建。
(5)无格式虚拟张量的视图不应该是节点输出。
(6)无量纲或无格式虚拟金字塔的级别不应该是节点输出。
6)继承
子对象从其父对象的虚拟属性继承。子对象也继承自其父对象的无标注或无格式特性,但有以下限制。
当调整父属性(父属性是节点的输出)时,它会在图形验证时自动调整。
当子对象本身是节点的输出时,它不能在图验证中进行调整。
7)优化
在Graph验证和执行过程中,不必创建虚拟数据对象,因此虚拟数据对象的大小可能为零。
这些限制使供应商能够优化数据对象或其使用的某些方面。一些供应商可能不分配这样的对象,一些供应商可能创建对象的中间子对象,还有一些供应商可能在远程、不可访问的内存上分配对象。OpenVX并没有禁止供应商进行哪种优化,只是它可能会发生。
对于使用未定义或部分定义的大小和/或未定义格式(VX_DF_IMAGE_VIRT)创建的虚拟图像,在图形验证期间,图像大小和格式将从节点输入图像继承。
虚拟图像验证,视觉功能、输出图像大小与格式,见表2-1。
表2-1 虚拟图像验证,视觉功能、输出图像大小与格式
视觉功能 |
输出图像大小 |
输出图像格式 |
AbsDiff |
与输入图像相同 |
|
Add |
与输入图像相同 |
|
And |
与输入图像相同 |
与输入图像相同 |
BilateralFilter |
|
|
Box3x3 |
与输入图像相同 |
|
CannyEdgeDetector |
与输入图像相同 |
|
ChannelCombine |
与输入图像相同 |
|
ChannelExtract |
与输入图像相同 |
|
ColorConvert |
与输入图像相同 |
|
ConvertDepth |
与输入图像相同 |
|
Convolve |
与输入图像相同 |
|
Copy (image object) |
与输入图像相同 |
与输入图像相同 |
Dilate3x3 |
与输入图像相同 |
与输入图像相同 |
EqualizeHist |
与输入图像相同 |
|
Erode3x3 |
与输入图像相同 |
与输入图像相同 |
FastCorners |
|
|
Gaussian3x3 |
与输入图像相同 |
|
GaussianPyramid |
|
|
HarrisCorners |
|
|
HalfScaleGaussian |
|
与输入图像相同 |
HarrisCorners |
|
|
HOGCells |
|
|
HOGFeatures |
|
|
HoughLinesP |
|
|
IntegralImage |
与输入图像相同 |
|
LaplacianPyramid |
|
与输入图像相同 |
LaplacianReconstruct |
|
与输入图像相同 |
LBP |
与输入图像相同 |
|
Magnitude |
与输入图像相同 |
|
MatchTemplate |
|
|
MeanStdDev |
|
|
Median3x3 |
与输入图像相同 |
与输入图像相同 |
Max |
与输入图像相同 |
与输入图像相同 |
Min |
与输入图像相同 |
与输入图像相同 |
MinMaxLoc |
|
|
Multiply |
与输入图像相同 |
|
NonLinearFilter |
与输入图像相同 |
与输入图像相同 |
NonMaxSuppression |
与输入图像相同 |
与输入图像相同 |
Not |
与输入图像相同 |
与输入图像相同 |
OpticalFlowPyrLK |
|
|
Or |
与输入图像相同 |
与输入图像相同 |
Phase |
与输入图像相同 |
|
Remap |
与重新映射目标相同 |
|
ScaleImage |
|
与输入图像相同 |
Sobel3x3 |
与输入图像相同 |
|
Subtract |
与输入图像相同 |
|
TableLookup |
与输入图像相同 |
|
TensorMultiply |
|
|
TensorAdd |
|
|
TensorSubtract |
|
|
TensorMatrixMultiply |
|
|
TensorTableLookup |
|
|
TensorTranspose |
|
|
Threshold |
与输入图像相同 |
|
WarpAffine |
|
与输入图像相同 |
WarpPerspective |
|
与输入图像相同 |
WeightedAverage |
与输入图像相同 |
|
Xor |
与输入图像相同 |
与输入图像相同 |