在给定表示图像的扁平数组中像素的高度、宽度和索引的情况下,获取像素的 X 和 Y 位置



>想象一下你有这个图像

[[1 2 3] [4 5 6] [7 8 90]]

你把它展平成这个格式——

[1 2 3 4 5 6 7 8 90]

现在,您将获得Pixel 90的索引为8。如何找到像素 90 在第 3 行和第 3 列中?

OpenCL与其他编程语言(如C,C++,Java等(类似,使用从零开始的索引。因此,在此术语中,您要查找第 2 行和第 2 列。

现在要计算哪一行,我们需要将索引位置 8 除以列数:

8 / 3 = 2

因此,在从零开始的索引中,这是第二行。

现在计算我们使用取模运算符的列:

8 % 3 = 2

在 2D 情况下,矩形中尺寸为 (sx,sy( 的点 (x,y( 可以在 1D 空间中用线性索引 n 表示,如下所示:

n = x+y*sx

将一维索引 n 转换回 (x,y( 的工作原理如下:

x = n%sx
y = n/sx

对于 3D 情况,a 框中尺寸为 (sx,sy,sz( 的点 (x,y,z( 可以在 1D 中表示为

n = x+(y+z*sy)*sx

并像这样转换回 (x,y,z(:

z  = n/(sx*sy);
temp = n%(sx*sy);
y = temp/sx;
x = temp%sx;

请注意,这里的"/"表示整数除法(总是向下舍入结果(,"%"是取模运算符。

最新更新