将2D坐标转换为1D数组

3
我也阅读了以下内容:

将2D数组索引转换为1D索引

我正在尝试调试我的程序,需要了解如何将二维坐标转换为一维坐标。
例如,如果我有一个IJ坐标:(3284,1352),我们想要访问一个一维数组,它是(3492,2188),我们该怎么做?
到目前为止,我尝试过:
1)我认为你需要为每一行和每一列进行偏移:
i x j = 3284 * 1352 = 4.439.968

如果我们知道坐标(3284,1352)在图像上对应的是灰度强度为1的线段:

enter image description here

我们尝试访问一维数组,其中每个像素都有其灰度值,在像素4.439.968中,我们有:

enter image description here

灰度强度为14

这很奇怪,因为:

-> ITKSnap没有显示切片编号为14的内容:

enter image description here

-> 我们的分段具有灰度级别1,因此在手动计算要访问的索引后,我们应该找到该灰度级别:

enter image description here

我尝试的第二种方法是按以下方式计算:

column clicked * number of total rows + row clicked;

j * xLength + i;

在我们的例子中是:
1352 * 3492 + 3284 = 4.724.468

如果我们尝试在数据中查找该像素:

enter image description here

我们发现灰度级为0,这对应于背景。
转换有什么问题吗?
你能帮我吗?

我认为应该是:行点击 * 总列数 + 列点击; 因为通常是按列然后按行(从左到右,从上到下)。 - ibrahim mahrir
1个回答

4
我认为你需要这样的东西:index = (y * maxColumns) + x
(看起来你的j=x,i=y)
我画了一些东西来可视化它: 2d to 1d array

1
我认为Math.round调用是不必要的。这只是整数运算,对吧? - ibrahim mahrir
是的,你说得对。我只是从一个项目中复制出来的,在那个项目中我使用了 Math.sqrt 来计算总列数。(最近我也遇到了一些问题,因为在 JS 中没有 int 类型,所以我现在到处都加上了 Math.round ;D) - timlg07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接