我有一堆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];
}
}