]> Creatis software - bbtk.git/blobdiff - packages/demo/bbs/appli/demoFiltering1.bbs
Feature #1774
[bbtk.git] / packages / demo / bbs / appli / demoFiltering1.bbs
index 109973696aaa092f0a98c9533deca60c756467bb..6639ad3a06279c3816a2632d9907c160885a5eee 100644 (file)
@@ -1,6 +1,32 @@
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ #                        pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ #  This software is governed by the CeCILL-B license under French law and
+ #  abiding by the rules of distribution of free software. You can  use,
+ #  modify and/ or redistribute the software under the terms of the CeCILL-B
+ #  license as circulated by CEA, CNRS and INRIA at the following URL
+ #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ #  or in the file LICENSE.txt.
+ #
+ #  As a counterpart to the access to the source code and  rights to copy,
+ #  modify and redistribute granted by the license, users are provided only
+ #  with a limited warranty  and the software's author,  the holder of the
+ #  economic rights,  and the successive licensors  have only  limited
+ #  liability.
+ #
+ #  The fact that you are presently reading this means that you have had
+ #  knowledge of the CeCILL-B license and that you accept its terms.
+ # ------------------------------------------------------------------------ */
+
 description "Basic segmentation and filtering of an image"
 author "jpr@creatis.insa-lyon.fr"
-category "demo"
+category "demo, filter"
 
 // 3 Slices, 2 volumes
 
@@ -11,18 +37,91 @@ include itk
 include itkvtk
 include wxvtk
 
+//
+// Get the image and determine Slice number, slider size, ...
+// ----------------------------------------------------------
+
 # Here loads hola.mhd
+# -------------------
+# Don't forget to comment out the following 2 lines
+# If you want to check someting else.
+
 include vtk/boxes/bbLoadHola
 new LoadHola reader
+
 # uncomment next lines to have a file selector
-#new FileSelector openFileDialog
-#new ImageReader reader
-#  connect openFileDialog.Out reader.In
+# --------------------------------------------
+/*
+new FileSelector openFileDialog
+new ImageReader reader
+  connect openFileDialog.Out reader.In
+*/
+
+# uncomment next lines to use Gimmick
+# -----------------------------------
+/*
+load creaImageIO
+new Gimmick reader
+*/
+
+# uncomment next lines to Read a MHD file (and nothing else !)
+# ------------------------------------------------------------
+/*
+new FileSelector openFileDialog
+new MetaImageReader reader
+   connect openFileDialog.Out reader.In
+*/
+
+# uncomment the following lines to read a 3D images stack
+# (only if file name order is meaningfull)
+# -------------------------------------------------------
+/*
+// To choose the directory
+new DirectorySelector ds
+// To get the image names into a vector
+new FilesFromDirectory fd
+// To read all the files, as a bbitk::ImagePointer
+new ImageSeriesReader reader
+// user choosen directory as input
+connect ds.Out fd.In
+set fd.Recursive false
+// list of files as input
+#print "Files found in $ds.Out$\n
+connect fd.Out reader.FileNames
+*/
+
+# uncomment the following lines to read a 3D images stack
+# (if the directory contains a 'XCoherent" Serie)
+# -------------------------------------------------------
+/*
+// To choose the directory
+new DirectorySelector ds
+// To get the image names into a vector
+new FilesFromDirectory fd
+// user choosen directory as input
+connect ds.Out fd.In 
+// order the files, computes an accurate ZSpacing
+new GetXCoherentInfoGdcmReader reader
+connect fd.Out reader.In
+*/
+
+# uncomment the following lines to read a 3D images stack
+# (with DICOMDirReader)
+# -------------------------------------------------------
+/*
+include itk/boxes/bbDICOMDirReader
+// To choose the directory
+new DirectorySelector ds
+new DICOMDirReader reader
+   connect ds.Out reader.In
+*/
+
+// We need that to set Sliders sizes
 
 #Get image dimensions, ...
 new ImageProperties mc
    connect reader.Out mc.In
-   
+
 #Get number of planes  (Z)
 new GetVectorIntElement gveZ
    connect mc.Size gveZ.In
@@ -32,69 +131,150 @@ new GetVectorIntElement gveZ
 new Div div2
   connect   gveZ.Out div2.In1
   set div2.In2 2
-  
-#---------------------------------------------------------------------
 
-new Slider slider
-  set slider.Title "Slice"
-  
+//
+// Graphical organization
+// ----------------------
+
+new LayoutSplit mainSplit
+  set mainSplit.Proportion 60
+  set mainSplit.WinHeight  1000
+  set mainSplit.WinWidth   1400
+  set mainSplit.WinTitle "Processing / Viewing example (demoFiltering1.bbs) "
+
+   new LayoutSplit splitUp
+     set splitUp.Proportion 38
+     connect splitUp.Widget  mainSplit.Widget1
+
+      new LayoutLine toolLayout
+        set toolLayout.Orientation H
+        connect toolLayout.Widget splitUp.Widget1
+
+          new LayoutLine sliderLayout
+              set sliderLayout.Orientation V
+             connect sliderLayout.Widget toolLayout.Widget1
+
+                 new Slider sliceSlider
+                    set sliceSlider.Title "Slice"
+                    set sliceSlider.ReactiveOnTrack true
+                   connect sliceSlider.Widget sliderLayout.Widget1
+
+                 new Slider lowerThresholdSlider
+                    set lowerThresholdSlider.Title "LowerThreshold"
+                    set lowerThresholdSlider.Max       200
+                    set lowerThresholdSlider.In        10
+                    set lowerThresholdSlider.ChangeResolution 1
+                   connect lowerThresholdSlider.Widget sliderLayout.Widget2
+
+                 new Slider upperThresholdSlider
+                    set upperThresholdSlider.Title "UpperThreshold"
+                    set upperThresholdSlider.Max       500
+                    set upperThresholdSlider.In        150
+                    set upperThresholdSlider.ChangeResolution 1
+                   connect upperThresholdSlider.Widget sliderLayout.Widget3
+
+                 new Slider smoothSlider
+                    set smoothSlider.Title "Smooth"
+                    set smoothSlider.Max       10
+                    set smoothSlider.In        3
+                    set smoothSlider.ChangeResolution 1
+                   connect  smoothSlider.Widget sliderLayout.Widget4
+
+           new LayoutLine buttonLayout
+              set buttonLayout.Orientation H
+             connect buttonLayout.Widget toolLayout.Widget2
+
+              new ColourSelectorButton colourThreshold
+                 set colourThreshold.In "1 0 0"
+                connect colourThreshold.Widget buttonLayout.Widget1
+
+              new ColourSelectorButton colourSmooth
+                 set colourSmooth.In "1 1 0"
+                connect colourSmooth.Widget buttonLayout.Widget2
+
+/*
+              new CommandButton refresh
+                 set refresh.Label "Refresh (to be used once at start time)"
+                connect refresh.Widget buttonLayout.Widget3
+*/
+      new LayoutLine layout2D
+         set layout2D.Orientation H
+         connect layout2D.Widget splitUp.Widget2
+
+         new Viewer2D viewer2DImageOriginal
+           connect viewer2DImageOriginal.Widget layout2D.Widget1
+
+         new Viewer2D viewer2DImageSegmented
+           connect viewer2DImageSegmented.Widget layout2D.Widget2
+
+         new Viewer2D viewer2DImageSmooth
+           connect viewer2DImageSmooth.Widget layout2D.Widget3
+
+   new LayoutSplit layout3D
+     set layout3D.Orientation H
+     set layout3D.Proportion 90
+     connect layout3D.Widget  mainSplit.Widget2
+
+        new LayoutSplit layoutSurfaces
+           set layoutSurfaces.Orientation H
+           set layoutSurfaces.Proportion 50
+          connect layoutSurfaces.Widget layout3D.Widget1
+
+           new Viewer3D  viewer3DSurfaceThreshold
+          connect viewer3DSurfaceThreshold.Widget layoutSurfaces.Widget1
+
+          new Viewer3D  viewer3DSurfaceSmooth
+          connect viewer3DSurfaceSmooth.Widget layoutSurfaces.Widget2
+
+        new LayoutLine vSliderLayout
+          connect vSliderLayout.Widget layout3D.Widget2
+
+           new Slider lowerOpacitySlider
+              set lowerOpacitySlider.Title "Opacity"
+              set lowerOpacitySlider.Min       1
+              set lowerOpacitySlider.Max       100
+              set lowerOpacitySlider.In        50
+              set lowerOpacitySlider.Orientation V
+             connect lowerOpacitySlider.Widget vSliderLayout.Widget1
+
+/*
+           new Slider upperOpacitySlider
+              set upperOpacitySlider.Title "UpperOpacity"
+              set upperOpacitySlider.Max       100
+              set upperOpacitySlider.In        100
+              set upperOpacitySlider.Orientation V
+             connect upperOpacitySlider.Widget vSliderLayout.Widget2
+*/
+
+//
+// End of Graphical organization
+// -----------------------------
+
+//
+// Processing pipeline
+// -------------------
+
+  connect reader.Out                    viewer2DImageOriginal.In
+  connect sliceSlider.Out               viewer2DImageOriginal.Slice
+
   #Slider size is the number of planes
-  connect gveZ.Out     slider.Max
+  connect gveZ.Out     sliceSlider.Max
   #initial slice is the middle one
-  connect div2.Out slider.In
-  set slider.ChangeResolution 1
-  
-new Slider lowerThresholdSlider
-  set lowerThresholdSlider.Title "LowerThreshold"
-  set lowerThresholdSlider.Max         50
-  set lowerThresholdSlider.In  20
-  set lowerThresholdSlider.ChangeResolution 1
+  connect div2.Out sliceSlider.In
+  set sliceSlider.ChangeResolution 1
   
-new Slider upperThresholdSlider
-  set upperThresholdSlider.Title "UpperThreshold"
-  set upperThresholdSlider.Max         50
-  set upperThresholdSlider.In  500
-  set upperThresholdSlider.ChangeResolution 1 
-
-new Slider smoothSlider
-  set smoothSlider.Title "Smooth"
-  set smoothSlider.Max         10
-  set smoothSlider.In  1
-  set smoothSlider.ChangeResolution 1 
-    
-new CommandButton refresh
-   set refresh.Label "Refresh"
-   set refresh.In "exec isoextractorthreshold;exec isoextractorsmooth;exec mainSplit"
-
-new MultipleInputs refreshimages
-  //connect slider.BoxChange             refreshimages.In1
-  connect upperThresholdSlider.BoxChange refreshimages.In2
-  connect lowerThresholdSlider.BoxChange refreshimages.In3
-  connect smoothSlider.BoxChange         refreshimages.In4
-  
-#---------------------------------------------------------------------
-
-new Viewer2D viewer2DImageOriginal
-  connect reader.Out                    viewer2DImageOriginal.In
-  connect slider.Out                    viewer2DImageOriginal.Slice
-  connect slider.BoxChange              viewer2DImageOriginal.BoxExecute
-    
-#---------------------------------------------------------------------
+// Images 2D
 
-new BinaryThresholdImageFilter threshold
-  connect upperThresholdSlider.Out threshold.UpperThreshold
-  connect lowerThresholdSlider.Out threshold.LowerThreshold  
+ new BinaryThresholdImageFilter threshold
   set threshold.InsideValue 255
   set threshold.OutsideValue 0
+
+  connect upperThresholdSlider.Out threshold.UpperThreshold
+  connect lowerThresholdSlider.Out threshold.LowerThreshold
   connect reader.Out threshold.In
 
-new Viewer2D viewer2DImageSegmented
   connect threshold.Out                        viewer2DImageSegmented.In
-  connect slider.Out                   viewer2DImageSegmented.Slice
-//  connect slider.BoxChange           viewer2DImageSegmented.BoxExecute
-  connect refreshimages.Out            viewer2DImageSegmented.BoxExecute
-  
-#---------------------------------------------------------------------
+  connect sliceSlider.Out              viewer2DImageSegmented.Slice
 
 new ImageGaussianSmooth smooth
   connect threshold.Out smooth.In
@@ -102,102 +282,78 @@ new ImageGaussianSmooth smooth
   connect smoothSlider.Out smooth.StdDevY
   connect smoothSlider.Out smooth.StdDevZ
 
-
-new Viewer2D viewer2DImageSmooth
-  connect smooth.Out                   viewer2DImageSmooth.In
-  connect slider.Out                   viewer2DImageSmooth.Slice
-  connect slider.BoxChange             viewer2DImageSmooth.BoxExecute
+  connect smooth.Out            viewer2DImageSmooth.In
+  connect sliceSlider.Out       viewer2DImageSmooth.Slice
 
 
-#---------------------------------------------------------------------
+// Planes
+new ImagePlanes planes
+  connect reader.Out planes.In
+  connect planes.PlaneX viewer3DSurfaceSmooth.Obs1
+  connect planes.PlaneY viewer3DSurfaceSmooth.Obs2
+  connect planes.PlaneZ viewer3DSurfaceSmooth.Obs3
 
-new LayoutLine upLayout
-  set upLayout.Orientation H
-  connect viewer2DImageOriginal.Widget         upLayout.Widget1
-  connect viewer2DImageSegmented.Widget                upLayout.Widget2
-  connect viewer2DImageSmooth.Widget           upLayout.Widget3
+// Surfaces 3D 
 
+new IsoSurfaceExtractor  isoextractorThreshold
+  connect threshold.Out isoextractorThreshold.In
+  set isoextractorThreshold.Opacity 1  
+  set isoextractorThreshold.Isovalue 100
+  connect colourThreshold.Out isoextractorThreshold.Colour
+  connect isoextractorThreshold.Out  viewer3DSurfaceThreshold.In1
 
-new ColourSelectorButton colourLower
-   set colourLower.In "1 1 0"
-   
-new ColourSelectorButton colourUpper  
-   set colourUpper.In "1 0 0"
-   
-#---------------------------------------------------------------------
-
-new Viewer3D  viewernvImagethreshold3D
-#  set viewernvImagethreshold3D.nTypeView "5" 
-
-new IsoSurfaceExtractor  isoextractorthreshold
-  connect threshold.Out isoextractorthreshold.In
-  set isoextractorthreshold.Opacity 1.0
-  set isoextractorthreshold.Isovalue 100
-  connect colourUpper.Out isoextractorthreshold.Colour  
-  connect viewernvImagethreshold3D.Renderer    isoextractorthreshold.Renderer
-
-
-#---------------------------------------------------------------------
-new Viewer3D  viewernvImageSmooth3D
-#  set viewernvImageSmooth3D.nTypeView "5" 
-  //connect refreshimages.Out          viewernvImageSmooth3D.BoxExecute
-
-new IsoSurfaceExtractor  isoextractorsmooth
-  connect smooth.Out isoextractorsmooth.In
-  set isoextractorsmooth.Opacity 0.2
-  set isoextractorsmooth.Isovalue 200
-  connect colourLower.Out isoextractorsmooth.Colour
-  connect viewernvImageSmooth3D.Renderer       isoextractorsmooth.Renderer
-
-
-#---------------------------------------------------------------------
-
-new LayoutSplit downLayout
-  set downLayout.Orientation H
-  set downLayout.Proportion 50
-  connect viewernvImagethreshold3D.Widget      downLayout.Widget1
-  connect viewernvImageSmooth3D.Widget         downLayout.Widget2
-
-new LayoutLine sliderLayout
-  set sliderLayout.Orientation V
-
-new LayoutLine buttonLayout
-  set buttonLayout.Orientation V
-  connect colourLower.Widget buttonLayout.Widget1
-  connect colourUpper.Widget   buttonLayout.Widget2
-  connect refresh.Widget       buttonLayout.Widget3 
-      
-new LayoutLine toolLayout
-  set toolLayout.Orientation H  
-  connect  sliderLayout.Widget toolLayout.Widget1
-  connect  buttonLayout.Widget toolLayout.Widget2
-
-  connect refresh.BoxChange smooth.BoxExecute
-
-#---------------------------------------------------------------------
-new LayoutSplit splitUp
-  set splitUp.Proportion 50
-  connect toolLayout.Widget     splitUp.Widget1
-  connect upLayout.Widget       splitUp.Widget2
-
-  connect slider.Widget                 sliderLayout.Widget1
-  connect lowerThresholdSlider.Widget   sliderLayout.Widget2
-  connect upperThresholdSlider.Widget   sliderLayout.Widget3
-  connect smoothSlider.Widget           sliderLayout.Widget4     
-  
+new Div div3
+   connect lowerOpacitySlider.Out div3.In1
+   set div3.In2 100
 
-new LayoutSplit mainSplit
-  set mainSplit.Proportion 66
-  set mainSplit.WinHeight 1200
-  set mainSplit.WinWidth 1600
-  set mainSplit.WinTitle "Processing / Viewing example (demoFiltering1.bbs) "
-  connect splitUp.Widget       mainSplit.Widget1
-  connect downLayout.Widget    mainSplit.Widget2
+new IsoSurfaceExtractor  isoextractorSmooth
+  connect smooth.Out isoextractorSmooth.In
+  connect div3.Out isoextractorSmooth.Opacity
+  set isoextractorSmooth.Isovalue 200
+  connect colourSmooth.Out isoextractorSmooth.Colour
+  connect isoextractorSmooth.Out  viewer3DSurfaceSmooth.In2
 
-#---------------------------------------------------------------------
+// Refresh issues
 
-exec isoextractorthreshold
-exec isoextractorsmooth
+new MultipleInputs multInForImageOriginal
+  connect sliceSlider.BoxChange multInForImageOriginal.In1
+#  connect refresh.BoxChange     multInForImageOriginal.In2
 
 
-exec mainSplit
+ new MultipleInputs multInForImageSegmented
+  connect lowerThresholdSlider.BoxChange multInForImageSegmented.In1
+  connect upperThresholdSlider.BoxChange multInForImageSegmented.In2
+#  connect refresh.BoxChange              multInForImageSegmented.In3
+  connect sliceSlider.BoxChange  multInForImageSegmented.In4    
+    
+ new MultipleInputs multInForImageSmooth
+  connect lowerThresholdSlider.BoxChange multInForImageSmooth.In1
+  connect upperThresholdSlider.BoxChange multInForImageSmooth.In2 
+  connect smoothSlider.BoxChange         multInForImageSmooth.In3
+#  connect refresh.BoxChange              multInForImageSmooth.In4
+  connect sliceSlider.BoxChange multInForImageSmooth.In5
+
+ new MultipleInputs multInForSurfaceThreshold
+#  connect refresh.BoxChange multInForSurfaceThreshold.In1
+  connect colourThreshold.BoxChange multInForSurfaceThreshold.In2
+  connect lowerThresholdSlider.BoxChange multInForSurfaceThreshold.In3
+  connect upperThresholdSlider.BoxChange multInForSurfaceThreshold.In4 
+
+ new MultipleInputs multInForSurfaceSmooth
+#  connect refresh.BoxChange multInForSurfaceSmooth.In1
+  connect lowerOpacitySlider.BoxChange multInForSurfaceSmooth.In1
+  connect colourSmooth.BoxChange multInForSurfaceSmooth.In2
+  connect lowerThresholdSlider.BoxChange multInForSurfaceSmooth.In3
+  connect upperThresholdSlider.BoxChange multInForSurfaceSmooth.In4
+  connect smoothSlider.BoxChange         multInForSurfaceSmooth.In5
+
+  connect multInForImageOriginal.BoxChange     viewer2DImageOriginal.BoxExecute
+  connect multInForImageSegmented.BoxChange    viewer2DImageSegmented.BoxExecute
+  connect multInForImageSmooth.BoxChange       viewer2DImageSmooth.BoxExecute
+
+  connect multInForSurfaceThreshold.BoxChange  viewer3DSurfaceThreshold.BoxExecute
+  connect multInForSurfaceSmooth.BoxChange     viewer3DSurfaceSmooth.BoxExecute
+
+
+  exec mainSplit