0

我是 OpenVX 的新手,从文档中了解到 OpenVX 使用row-major storage。下面的矩阵访问示例说明了这一点,就像我们在纯 C 代码中使用的普通行优先访问模式一样。

然后我转到vx_matrixvxCreateMatrix文档页面。前者有这样的说法:

VX_MATRIX_ROWS - 矩阵的 M 维 [REQ-1131]。只读 [REQ-1132]。使用 vx_size 参数。

VX_MATRIX_COLUMNS - 矩阵的 N 维 [REQ-1133]。只读 [REQ-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

但是,当我到达Warp Affine页面时,它真的让我很困惑,它说:

该内核使用这种像素坐标转换方法 [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=2row=3作为论点呢?我的理解完全错误吗?

4

1 回答 1

1

这将是一个良好的开端并有助于您的实施

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

于 2021-09-15T12:13:59.940 回答