簡體   English   中英

如何在3D空間旋轉一疊圖片?

[英]How to rotate a stack of images in 3D space?

我有一堆二維圖像。 讓我們說下面是這個體積的尺寸。

深度(圖像數量)- 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 度方向。

我試圖讀取不同軸上的像素值。 比如以寬度->深度->高度順序讀取像素值等。

但是每個方向都需要很多 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 坐標限於相應的體積維度。

編輯:

使用多維 arrays 以使索引更清晰的示例。 您需要將其與相應的代碼交換,並將結果轉換為 bitmap。

        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];
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM