给定代表图像的FLATTENED数组中像素的HEIGHT,WIDTH和索引,获取像素的X和Y位置

时间:2019-06-11 07:27:22

标签: image opencl

想象你有这张照片

  

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

您将其展平为这种格式-

  

[1 2 3 4 5 6 7 8 90]

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

2 个答案:

答案 0 :(得分:2)

OpenCL与其他编程语言(例如C,C ++,Java等)类似,使用zero based indexing。因此,按照这种说法,您正在寻找第2行和第2列。

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

8 / 3 = 2

所以从零开始的索引是第二行。

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

8 % 3 = 2

答案 1 :(得分:0)

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

n = x+y*sx

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

x = n%sx
y = n/sx

对于3D情况,可以将尺寸为(sx,sy,sz)的框中的点(x,y,z)用一维表示为

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

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

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

请注意,这里的“ /”表示整数除法(始终将结果四舍五入),“%”是取模运算符。