画像の3D表現をスライスしようとしています。既知の因子である次3D画像のスライシング
- DimensionX
- DimensionY
- DimensionZ
- ボクセル[]
ボクセル[]は、画素の階調を表すushortsのアレイです。
今、私はすべての可能な方向にそれをスライスする必要があります。 x、y、zといってみましょう。
私はこのために木の実装を持っていますが、彼らは一つの問題を持って、彼らは同じではありません寸法では動作しません。 (Zスライスを除いて、これは完全に動作しています)。
これらはメソッドです:
private ushort[] GetZSlice(int z, ushort[] voxels, int DimensionX, int DimensionY)
{
var res = new ushort[DimensionX * DimensionY];
for(int j = 0; j < DimensionY; j++)
{
for(int i = 0; i < DimensionX; i++)
{
res[j*DimensionX + i] = voxels[z*DimensionX*DimensionY + j*DimensionX + i];
}
}
return res;
}
この方法は完全に働いている、それは私がディメンションとして選択メイザーワットません。
深度としてxまたはyを使用する次の2つの方法は、より困難な問題となります。
private ushort[] GetYSlice(int y, ushort[] voxels, int DimensionX, int DimensionY, int DimensionZ)
{
var res = new ushort[DimensionX * DimensionZ];
for(int i = 0; i < DimensionX; i++)
{
for(int j = 0; j < DimensionX; j++)
{
res[j + i*DimensionX] = voxels[j * DimensionZ * DimensionY + Y*DimensionZ + i]
}
}
return res;
}
private ushort[] GetXSlice(int x, ushort[voxels], int DimensionX, int DimensionY, int DimensionZ)
{
var res = new short[DimensionY * DimensionZ];
for(int i = 0; i < DimensionY; i++)
{
for(int j = 0; j < DimensionZ; j++)
{
res[j + i*DimensionZ] = voxels[i*DimensionY + j*DimensionZ*DimensionX + x]
}
}
return res;
}
最後の2つの方法を改善して、等しくない寸法でも機能する方法を教えてください。
大変ありがとうございました。 – Gulpener