# MIP(maximum intensity projection) in VTK mit JAVA



## orlin (27. August 2009)

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. 


```
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();
	}
}
```


----------



## Thomas Darimont (27. August 2009)

Hallo,



> Wenn ich versuche alle 1024 DICOM Bilder zu visualisien dann sturzt mein Programm ab.


Fehlermeldung? Exception ? Stacktrace?

Gruß Tom


----------



## orlin (27. August 2009)

Hallo Tom,

Es wird ein Datei erzeugt die den Fehlermedlung enthät. 
Wenn ich das Programm normal starte dann sturzt es ab aber wenn ich mit DEGUB Zeile für Zeile durchgehe dann kann ich bis 1100 Bilder darstellen.
Ich gehe davon aus dass der Fehler an einen bestimmten Thread liegt.

Also in der Datei steht folgende Fehlermeldung:


```
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (0xe06d7363), pid=2244, tid=2852
#
# JRE version: 6.0_15-b03
# Java VM: Java HotSpot(TM) Client VM (14.1-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [kernel32.dll+0x12afb]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  T H R E A D  ---------------

Current thread (0x003a6800):  JavaThread "main" [_thread_in_native, id=2852, stack(0x008c0000,0x00910000)]

siginfo: ExceptionCode=0xe06d7363, ExceptionInformation=0x19930520 0x0090f9f0 0x030ece84 

Registers:
EAX=0x0090f948, EBX=0x00000000, ECX=0x00000000, EDX=0x00300001
ESP=0x0090f944, EBP=0x0090f998, ESI=0x0090f9d0, EDI=0x0cb00000
EIP=0x7c812afb, EFLAGS=0x00000206

Top of Stack: (sp=0x0090f944)
0x0090f944:   04304388 e06d7363 00000001 00000000
0x0090f954:   7c812afb 00000003 19930520 0090f9f0
0x0090f964:   030ece84 03220000 00000000 785838da
0x0090f974:   d616f7f7 0cb00000 04303880 00000000
0x0090f984:   785838da 7848beba 0434bc20 043038cc
0x0090f994:   0090f974 0090f9d0 7857dbf9 e06d7363
0x0090f9a4:   00000001 00000003 0090f9c4 e06d7363
0x0090f9b4:   00000001 00000000 00000000 00000003 

Instructions: (pc=0x7c812afb)
0x7c812aeb:   8d 7d c4 f3 a5 5f 8d 45 b0 50 ff 15 10 15 80 7c
0x7c812afb:   5e c9 c2 10 00 85 ff 0f 8e 36 93 ff ff 8b 55 fc 


Stack: [0x008c0000,0x00910000],  sp=0x0090f944,  free space=318k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [kernel32.dll+0x12afb]
C  [MSVCR90.dll+0x5dbf9]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  vtk.vtkAlgorithm.Update_51()V+0
j  vtk.vtkAlgorithm.Update()V+1
j  vtkMiptempo.main([Ljava/lang/String;)V+220
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x02aa5c00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1796, stack(0x02d20000,0x02d70000)]
  0x02aa2c00 JavaThread "CompilerThread0" daemon [_thread_blocked, id=2880, stack(0x02cd0000,0x02d20000)]
  0x02aa1400 JavaThread "Attach Listener" daemon [_thread_blocked, id=3408, stack(0x02c80000,0x02cd0000)]
  0x02aa0000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=1204, stack(0x02c30000,0x02c80000)]
  0x02a61800 JavaThread "Finalizer" daemon [_thread_blocked, id=3904, stack(0x02be0000,0x02c30000)]
  0x02a5cc00 JavaThread "Reference Handler" daemon [_thread_blocked, id=2392, stack(0x02b90000,0x02be0000)]
=>0x003a6800 JavaThread "main" [_thread_in_native, id=2852, stack(0x008c0000,0x00910000)]

Other Threads:
  0x02a5b400 VMThread [stack: 0x02b40000,0x02b90000] [id=2092]
  0x02aaac00 WatcherThread [stack: 0x02d70000,0x02dc0000] [id=2080]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 960K, used 333K [0x22990000, 0x22a90000, 0x22e70000)
  eden space 896K,  30% used [0x22990000, 0x229d3410, 0x22a70000)
  from space 64K,  99% used [0x22a80000, 0x22a8fff8, 0x22a90000)
  to   space 64K,   0% used [0x22a70000, 0x22a70000, 0x22a80000)
 tenured generation   total 4096K, used 58K [0x22e70000, 0x23270000, 0x26990000)
   the space 4096K,   1% used [0x22e70000, 0x22e7eaa8, 0x22e7ec00, 0x23270000)
 compacting perm gen  total 12288K, used 589K [0x26990000, 0x27590000, 0x2a990000)
   the space 12288K,   4% used [0x26990000, 0x26a237f0, 0x26a23800, 0x27590000)
    ro space 8192K,  63% used [0x2a990000, 0x2aea9920, 0x2aea9a00, 0x2b190000)
    rw space 12288K,  53% used [0x2b190000, 0x2b804dd0, 0x2b804e00, 0x2bd90000)

Dynamic libraries:
0x00400000 - 0x00424000 	C:\Programme\Java\jre6\bin\javaw.exe
0x7c910000 - 0x7c9c9000 	C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c908000 	C:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e4a000 	C:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee2000 	C:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000 	C:\WINDOWS\system32\Secur32.dll
0x7e360000 - 0x7e3f1000 	C:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f39000 	C:\WINDOWS\system32\GDI32.dll
0x7c340000 - 0x7c396000 	C:\Programme\Java\jre6\bin\msvcr71.dll
0x6d800000 - 0x6da8b000 	C:\Programme\Java\jre6\bin\client\jvm.dll
0x76af0000 - 0x76b1e000 	C:\WINDOWS\system32\WINMM.dll
0x6d7b0000 - 0x6d7bc000 	C:\Programme\Java\jre6\bin\verify.dll
0x6d330000 - 0x6d34f000 	C:\Programme\Java\jre6\bin\java.dll
0x6d290000 - 0x6d298000 	C:\Programme\Java\jre6\bin\hpi.dll
0x76bb0000 - 0x76bbb000 	C:\WINDOWS\system32\PSAPI.DLL
0x6d7f0000 - 0x6d7ff000 	C:\Programme\Java\jre6\bin\zip.dll
0x10000000 - 0x1004e000 	C:\Programme\VTK\VTKBin\bin\Release\vtkCommonJava.dll
0x02fd0000 - 0x0316c000 	C:\Programme\VTK\VTKBin\bin\Release\vtkCommon.dll
0x03180000 - 0x031b5000 	C:\Programme\VTK\VTKBin\bin\Release\vtksys.dll
0x71a10000 - 0x71a27000 	C:\WINDOWS\system32\WS2_32.dll
0x77be0000 - 0x77c38000 	C:\WINDOWS\system32\msvcrt.dll
0x71a00000 - 0x71a08000 	C:\WINDOWS\system32\WS2HELP.dll
0x78520000 - 0x785c3000 	C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\MSVCR90.dll
0x78480000 - 0x7850e000 	C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\MSVCP90.dll
0x71a30000 - 0x71a3a000 	C:\WINDOWS\system32\WSOCK32.dll
0x03230000 - 0x032a9000 	C:\Programme\VTK\VTKBin\bin\Release\vtkFilteringJava.dll
0x032c0000 - 0x034c4000 	C:\Programme\VTK\VTKBin\bin\Release\vtkFiltering.dll
0x034e0000 - 0x0351f000 	C:\Programme\VTK\VTKBin\bin\Release\vtkIOJava.dll
0x03530000 - 0x0383a000 	C:\Programme\VTK\VTKBin\bin\Release\vtkIO.dll
0x03850000 - 0x0386b000 	C:\Programme\VTK\VTKBin\bin\Release\vtkDICOMParser.dll
0x03880000 - 0x038a1000 	C:\Programme\VTK\VTKBin\bin\Release\vtkNetCDF.dll
0x038c0000 - 0x0392f000 	C:\Programme\VTK\VTKBin\bin\Release\vtkmetaio.dll
0x03940000 - 0x03952000 	C:\Programme\VTK\VTKBin\bin\Release\vtkzlib.dll
0x03970000 - 0x0398c000 	C:\Programme\VTK\VTKBin\bin\Release\vtkpng.dll
0x039a0000 - 0x039be000 	C:\Programme\VTK\VTKBin\bin\Release\vtkjpeg.dll
0x039d0000 - 0x03a17000 	C:\Programme\VTK\VTKBin\bin\Release\vtktiff.dll
0x03a30000 - 0x03a4c000 	C:\Programme\VTK\VTKBin\bin\Release\vtkexpat.dll
0x73ac0000 - 0x73ad7000 	C:\WINDOWS\system32\AVIFIL32.dll
0x774b0000 - 0x775ed000 	C:\WINDOWS\system32\ole32.dll
0x77bb0000 - 0x77bc5000 	C:\WINDOWS\system32\MSACM32.dll
0x75ec0000 - 0x75ee1000 	C:\WINDOWS\system32\MSVFW32.dll
0x7e670000 - 0x7ee91000 	C:\WINDOWS\system32\SHELL32.dll
0x77f40000 - 0x77fb6000 	C:\WINDOWS\system32\SHLWAPI.dll
0x773a0000 - 0x774a3000 	C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\COMCTL32.dll
0x03a80000 - 0x03ab1000 	C:\Programme\VTK\VTKBin\bin\Release\vtkImagingJava.dll
0x03ac0000 - 0x03cef000 	C:\Programme\VTK\VTKBin\bin\Release\vtkImaging.dll
0x03d00000 - 0x03d7f000 	C:\Programme\VTK\VTKBin\bin\Release\vtkGraphicsJava.dll
0x03d90000 - 0x041ac000 	C:\Programme\VTK\VTKBin\bin\Release\vtkGraphics.dll
0x041c0000 - 0x041e7000 	C:\Programme\VTK\VTKBin\bin\Release\vtkverdict.dll
0x04200000 - 0x04260000 	C:\Programme\VTK\VTKBin\bin\Release\vtkRenderingJava.dll
0x04390000 - 0x04694000 	C:\Programme\VTK\VTKBin\bin\Release\vtkRendering.dll
0x046a0000 - 0x046ad000 	C:\Programme\VTK\VTKBin\bin\Release\vtkftgl.dll
0x5f0d0000 - 0x5f19c000 	C:\WINDOWS\system32\OPENGL32.dll
0x68fc0000 - 0x68fe0000 	C:\WINDOWS\system32\GLU32.dll
0x736d0000 - 0x7371b000 	C:\WINDOWS\system32\DDRAW.dll
0x73b30000 - 0x73b36000 	C:\WINDOWS\system32\DCIMAN32.dll
0x046c0000 - 0x04718000 	C:\Programme\VTK\VTKBin\bin\Release\vtkfreetype.dll
0x6d360000 - 0x6d366000 	C:\Programme\Java\jre6\bin\jawt.dll
0x6d000000 - 0x6d14a000 	C:\Programme\Java\jre6\bin\awt.dll
0x72f70000 - 0x72f96000 	C:\WINDOWS\system32\WINSPOOL.DRV
0x76330000 - 0x7634d000 	C:\WINDOWS\system32\IMM32.dll
0x04c40000 - 0x04c5b000 	C:\Programme\VTK\VTKBin\bin\Release\vtkVolumeRenderingJava.dll
0x04c70000 - 0x05041000 	C:\Programme\VTK\VTKBin\bin\Release\vtkVolumeRendering.dll
0x5b0f0000 - 0x5b128000 	C:\WINDOWS\system32\uxtheme.dll
0x746a0000 - 0x746ec000 	C:\WINDOWS\system32\MSCTF.dll

VM Arguments:
jvm_args: -Dfile.encoding=Cp1252 
java_command: vtkMiptempo
Launcher Type: SUN_STANDARD

Environment Variables:
CLASSPATH=.;C:\Programme\Java\jre6\lib\ext\QTJava.zip;C:\Programme\Java\jdk1.6.0_13\lib;C:\Borland\BCC55\Bin;C:\Programme\VTK\VTKBin\bin\Release;
PATH=C:/Programme/Java/jre6/bin/client;C:/Programme/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\Java\jdk1.6.0_13\bin;C:\Programme\MySQL\MySQL Server 5.1\bin;C:\Programme\QuickTime\QTSystem\;C:\Programme\Java\jdk1.6.0_13\lib;C:\Borland\BCC55\Bin;C:\Programme\VTK\VTKBin\bin\Release;C:\Programme\CMake 2.6\bin;C:\Programme\CVSNT\;C:\Programme\VTK\VTKBin\bin\Release;;C:\Programme\Gemeinsame Dateien\Nero\Lib\
USERNAME=nouh
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 6, GenuineIntel
----------------------------------------------------------------------------------------------------------------
```
Danke


----------



## g-a-s-t (22. September 2009)

Ich arbeite selbst auch mit VTK und bin bei einer Problemlösungssuche auf  diese Seite gestossen. 

Aber vielleicht kennst Du diese bereits oder bist der dort Fragende


----------



## orlin (22. September 2009)

Hallo g-a-s-t,

du hast richtig erkannt, bin dort der Fragende.
Aber leider bin ich nicht weiter gekommen. 
Bei grossen Datensätzen funktioniert das nicht.
Falls du auch mit großen Datensätzen etwas Erfahrung  hast, freue ich mich auf ein Tipp.

gruss 
Orlin


----------



## g-a-s-t (22. September 2009)

Hallo Orlin,
da muss ich Dich leider enttäuschen. Ich arbeite bisher nur mit Datensätzen, die maximal 500 Schichten aufweisen.

Falls Du dennoch auf anderen Wegen auf eine Lösung stößt, dann lass es uns hier wissen. 

Grüsse


----------



## orlin (24. September 2009)

Hallo g-a-s-t,

ich arbeite jetzt auch mit kleinen Datensätzen aber ich muss nicht nur kleine Datensätze sondern auch große einlesen also werde ich später auf diesen Problem kommen , sollte ich mein Fehler finden werde ich natürlich hier posten

gruss 
Orlin


----------

