如何在三维空间中旋转图像堆栈



我有一堆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->深度->高度顺序等。

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

有没有更好的方法来实现音量的定向?

请帮助我如何在不同的方向上旋转这个卷90度。

提前谢谢。

您应该添加一些方法来按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];
}
}

最新更新