[英]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.