【问题标题】:How to rotate a stack of images in 3D space?如何在 3D 空间中旋转一堆图像?
【发布时间】:2020-11-06 20:53:00
【问题描述】:

我有一堆 2D 图像。 让我们说下面是这个卷的尺寸。

深度(图像数量) - 100
宽度(X 轴像素) - 200
高度(Y 轴像素) - 200

我想旋转这个体积并以此创建位图。我正在使用C# 来实现这一点。

这是我所做的:

List<short[]> volumebuffer = new List<short[]>(noImages);
for (int img = 0; imge<noImages; img++)
{

    short[] tmpArray = new short[ImgTotalHeight * ImgTotalWidth];
    int index = 0;
    for (int aHeight = 0; aHeight<ImgTotalHeight; aHeight++)
    {
       for (int aWidth = 0; aWidth<ImgTotalWidth; aWidth++)
       {
           tmpArray[index++] = image[aWidth + aHeight * ImgTotalWidth];

       }
    }
    #append this tmpArray to a List<>
    vomumebuffer.Add(tmpArray);

}

在上面的代码中,volumebuffer 将包含所有图像的所有像素值。我正在将每个图像的每个短数组转换为字节数组并从中创建位图。

现在我想旋转这个卷并从中创建位图。我只想创建 90 度方向。

我试图读取不同轴的像素值。 就像在 Width-> Depth -> Height order 等中读取像素值一样。

但是对于每个方向,这将需要许多 for 循环。

有没有更好的方法来实现体积的方向?

请帮助我了解如何在不同方向上将此卷旋转 90 度。

提前致谢。

【问题讨论】:

  • 你试过什么?你做了什么研究?你用什么数据结构来表示体积?你想要 90 度旋转还是任意旋转?见stackoverflow.com/help/how-to-ask
  • @JonasH - 抱歉解释模糊。我通过提供大量信息来编辑问题。

标签: c# arrays image 3d rotation


【解决方案1】:

您应该添加方法来按 x,y,z 坐标索引体积。然后,以 90 度的步长旋转将只是切换索引的位置,保持一维固定。例如

bitmap[u, v] = volume[0, v, u]

bitmap[u, v] = volume[v, 0, u]

bitmap[u, v] = volume[xSize - v, u, 0]

总共应该有 24 个有效组合

您可以将 0 替换为您想要的任何有效值,并且您需要确保 u/y 坐标限制在相应的体积维度内。

编辑:

使用多维数组以使索引更清晰的示例。您需要将其与相应的代码进行交换,并将结果转换为位图。

        var volume = new ushort[1, 2, 3];
        var bitmap = new ushort[volume.GetLength(2), volume.GetLength(1)];
        for (int v = 0; v < bitmap.GetLength(1); v++)
        {
            for (int u = 0; u < bitmap.GetLength(0); u++)
            {
                bitmap[u, v] = volume[0, v, u];
            }
        }

【讨论】:

  • 感谢您的快速回复。我没有清楚地理解你的答案。假设如果我有 x,y,z 坐标中的体积,如 volume[x,y,z],我如何进行 90 度定向并获取数组的值? (使用这个数组我需要创建一个图像位图)。如果可能的话,你能用一个 for 循环示例来解释我吗
  • 谢谢@Jonash。我会努力做到这一点
  • 我们如何创建任意方向?
  • @Bhargav Sonu 任意旋转要困难得多,因为它将涉及对体积进行重新采样。这足以成为一个新问题。
  • 对于每个 90 度方向,我们需要创建一个 for 循环组合权。我的意思是,如果想要 6 个方向,我们是否需要像您上面提到的那样创建 6 个循环组合?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多