Ich versuche, eine 3D-Darstellung eines Bildes zu schneiden. Folgende Faktoren ist bekannt:Slicing ein 3D-Bild
- DimensionX
- DimensionY
- DimensionZ
- Voxel []
Voxel [] ist ein Array von ushorts die Graustufen der Pixel darstellt.
Jetzt muss ich es in alle möglichen Richtungen schneiden. Mit sagen wir x, y oder z.
I Baum-Implementierungen für diese haben, aber sie haben ein Problem, sie arbeiten nicht mit Dimensionen, die nicht gleich sind. (Außer Get Z Slice, das funktioniert perfekt).
Dies sind die Methoden:
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;
}
Diese Methode einwandfrei funktioniert, ist es nicht mather wat i als die Dimension wählen.
Die nächsten beiden Methoden mit x oder y als Tiefe sind ein schwierigeres Problem.
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;
}
Wie könnte ich die letzten 2 Methoden verbessern, so dass es mit Dimensionen funktioniert, die nicht gleich sind?
Vielen Dank, das hat viel geholfen! – Gulpener