orlin
Mitglied
Hallo JAVA Gemeinde,
ich hoffe ich stelle diese Frage an der richtige Stelle.
Ich versuche Volumendaten zu visualisieren mit VTK in Java.
Ich habe einen Datensatz mit 512*512*1024.
Wenn ich versuche alle 1024 DICOM Bilder zu visualisien dann sturzt mein Programm ab. Wenn ich aber 800 Bilder nehme dann funktioniert richtig.
Ich weiss nicht ob man mit JAVA so viel Speicher für 1024 Bilder von Betriebsystem bekommen kann.
Hier ist mein code dass ich in eine main Methode reingebracht habe. Sollte jemand einen Fehler erkennen, bin ich dankbar für eine Antwort
.
ich hoffe ich stelle diese Frage an der richtige Stelle.
Ich versuche Volumendaten zu visualisieren mit VTK in Java.
Ich habe einen Datensatz mit 512*512*1024.
Wenn ich versuche alle 1024 DICOM Bilder zu visualisien dann sturzt mein Programm ab. Wenn ich aber 800 Bilder nehme dann funktioniert richtig.
Ich weiss nicht ob man mit JAVA so viel Speicher für 1024 Bilder von Betriebsystem bekommen kann.
Hier ist mein code dass ich in eine main Methode reingebracht habe. Sollte jemand einen Fehler erkennen, bin ich dankbar für eine Antwort

Code:
public static void main(String[] args)
{
vtkDICOMImageReader reader= new vtkDICOMImageReader();
vtkImageShiftScale vtkmyImageCast= new vtkImageShiftScale();
vtkPiecewiseFunction opacityTransferFunction= new
vtkPiecewiseFunction();
vtkPiecewiseFunction grayTransferFunction= new vtkPiecewiseFunction();
vtkVolumeProperty volumeProperty= new vtkVolumeProperty();
vtkVolumeRayCastMIPFunction mip= new vtkVolumeRayCastMIPFunction();
vtkVolumeRayCastMapper mapper= new vtkVolumeRayCastMapper();
vtkVolume volume= new vtkVolume();
vtkRenderWindowInteractor interactor= new vtkRenderWindowInteractor();
vtkRenderer renderer= new vtkRenderer();
vtkRenderWindow renderWindow= new vtkRenderWindow();
String DICOMPATH= "C:/Dokumente und Einstellungen/Desktop/test";
reader.SetDirectoryName(DICOMPATH);
reader.Update();
double[] range= reader.GetOutput().GetScalarRange();
double min= range[0];
double max= range[1];
double diff= max- min;
double slop= 255.0/ diff;
double inter= -slop* min;
double shift= inter/ slop;
vtkmyImageCast.SetInput(reader.GetOutput());
vtkmyImageCast.SetShift(shift);
vtkmyImageCast.SetScale(slop);
vtkmyImageCast.SetOutputScalarTypeToUnsignedShort();
vtkmyImageCast.Update();
vtkmyImageCast.GetOutput().GetScalarRange(range);
double level= 0.5* (range[0]+ range[1]);
double window= range[1]- range[0];
opacityTransferFunction.AddPoint(level- window/ 2, 0.0);
opacityTransferFunction.AddPoint(level+ window/ 2, 1.0);
grayTransferFunction.AddSegment(level- window/ 2, 0.0,
level+ window/ 2, 1.0);
volumeProperty.SetScalarOpacity(opacityTransferFunction);
volumeProperty.SetColor(grayTransferFunction);
mip.SetMaximizeMethodToOpacity();
mapper.SetInput(vtkmyImageCast.GetOutput());
mapper.SetVolumeRayCastFunction(mip);
mapper.SetBlendModeToMaximumIntensity();
mapper.SetSampleDistance(1.0);
volume.SetMapper(mapper);
volume.SetProperty(volumeProperty);
renderer.AddVolume(volume);
renderer.SetBackground(0, 0, 0);
renderWindow.SetSize(512, 512);
interactor.SetRenderWindow(renderWindow);
renderWindow.AddRenderer(renderer);
renderWindow.Render();
interactor.Initialize();
interactor.Start();
}
}