我是OpenVX的新手,从文档中了解到OpenVX使用行为主存储。下面的矩阵访问示例说明了这一点,就像我们在普通C代码中使用的普通行为主访问模式一样。
然后进入vx_matrix和vxCreateMatrix文档页面。前者有这样的语句:
VX_MATRIX_ROWS -矩阵的M维[REQ-1131]。只读(要求- 1132)。使用vx_size参数
VX_MATRIX_COLUMNS -矩阵的N维[REQ-1133]。只读(要求- 1134)。使用vx_size参数
而后者说:
vx_matrix vxCreateMatrix(
vx_context c,
vx_enum data_type,
vx_size columns,
vx_size rows);
所以根据我的理解,在OpenVX的世界里,当我说一个MxN矩阵时,M指的是行大小,N指的是列大小。vxCreateMatrix
声明遵循行主存储器的规定,先参数column
,再参数row
。
然而,当我到达翘曲仿射页时,它真的让我感到困惑,它说:
这个核用像素坐标平移[REQ-0498]的方法对2x3矩阵M执行仿射变换:
和C声明:
// x0 = a x + b y + c;
// y0 = d x + e y + f;
vx_float32 mat[3][2] = {
{a, d}, // 'x' coefficients
{b, e}, // 'y' coefficients
{c, f}, // 'offsets'
};
vx_matrix matrix = vxCreateMatrix(context, VX_TYPE_FLOAT32, 2, 3);
vxCopyMatrix(matrix, mat, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
如果M是一个2x3矩阵,根据上一节,它应该有2行3列。那么为什么要声明为mat[3][2]
和createMatrix
而接受column=2
和row=3
作为参数呢?我的理解完全错了吗?
这将是一个良好的开端,并有助于您的实现
https://software.intel.com/content/www/us/en/develop/documentation/sample-color-copy/top/color-copy-pipeline/color-copy-pipeline-the-scan-pre-process-openvx-graph.html