+ # ---------------------------------------------------------------------
+ #
+ # 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 : demoFiltering1-try.bbs"
+description "Basic segmentation and filtering of an image"
author "jpr@creatis.insa-lyon.fr"
-category "demo"
+category "demo, filter"
// 3 Slices, 2 volumes
// ----------------------------------------------------------
# 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
new Div div2
connect gveZ.Out div2.In1
set div2.In2 2
-
-//
+
+//
// Graphical organization
// ----------------------
new LayoutSplit mainSplit
- set mainSplit.Proportion 50
+ 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 50
- set lowerThresholdSlider.In 20
+ 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 500
- set upperThresholdSlider.ChangeResolution 1
+ 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 1
+ set smoothSlider.In 3
set smoothSlider.ChangeResolution 1
connect smoothSlider.Widget sliderLayout.Widget4
-
+
new LayoutLine buttonLayout
- set buttonLayout.Orientation V
+ 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.Widget1
-
- new ColourSelectorButton colourThreshold
- set colourThreshold.In "1 0 0"
- connect colourThreshold.Widget buttonLayout.Widget2
-
+ 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
+
+ new Viewer2D viewer2DImageSegmented
connect viewer2DImageSegmented.Widget layout2D.Widget2
- new Viewer2D viewer2DImageSmooth
- connect viewer2DImageSmooth.Widget layout2D.Widget3
-
+ 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
-
+ 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.Min 1
set lowerOpacitySlider.Max 100
- set lowerOpacitySlider.In 20
+ 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
+ set upperOpacitySlider.In 100
+ set upperOpacitySlider.Orientation V
connect upperOpacitySlider.Widget vSliderLayout.Widget2
*/
-//
+//
// End of Graphical organization
-// -----------------------------
+// -----------------------------
//
// Processing pipeline
set sliceSlider.ChangeResolution 1
// Images 2D
-
+
new BinaryThresholdImageFilter threshold
set threshold.InsideValue 255
set threshold.OutsideValue 0
-
+
connect upperThresholdSlider.Out threshold.UpperThreshold
- connect lowerThresholdSlider.Out threshold.LowerThreshold
+ connect lowerThresholdSlider.Out threshold.LowerThreshold
connect reader.Out threshold.In
-
+
connect threshold.Out viewer2DImageSegmented.In
connect sliceSlider.Out viewer2DImageSegmented.Slice
-
+
new ImageGaussianSmooth smooth
connect threshold.Out smooth.In
connect smoothSlider.Out smooth.StdDevX
connect smoothSlider.Out smooth.StdDevY
connect smoothSlider.Out smooth.StdDevZ
-
+
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
+
// Surfaces 3D
-
+
new IsoSurfaceExtractor isoextractorThreshold
connect threshold.Out isoextractorThreshold.In
set isoextractorThreshold.Opacity 1
set isoextractorThreshold.Isovalue 100
- connect colourThreshold.Out isoextractorThreshold.Colour
+ connect colourThreshold.Out isoextractorThreshold.Colour
connect isoextractorThreshold.Out viewer3DSurfaceThreshold.In1
-
+
new Div div3
connect lowerOpacitySlider.Out div3.In1
set div3.In2 100
connect smooth.Out isoextractorSmooth.In
connect div3.Out isoextractorSmooth.Opacity
set isoextractorSmooth.Isovalue 200
- connect colourSmooth.Out isoextractorSmooth.Colour
+ connect colourSmooth.Out isoextractorSmooth.Colour
connect isoextractorSmooth.Out viewer3DSurfaceSmooth.In2
-
-// Refresh issues
- new MultipleInputs multInForImageOriginal
- connect sliceSlider.BoxChange multInForImageOriginal.In1
- connect refresh.BoxChange multInForImageOriginal.In2
-
+// Refresh issues
+
+new MultipleInputs multInForImageOriginal
+ connect sliceSlider.BoxChange multInForImageOriginal.In1
+# connect refresh.BoxChange multInForImageOriginal.In2
+
+
new MultipleInputs multInForImageSegmented
connect lowerThresholdSlider.BoxChange multInForImageSegmented.In1
connect upperThresholdSlider.BoxChange multInForImageSegmented.In2
- connect refresh.BoxChange multInForImageSegmented.In3
+# 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 lowerOpacitySlider.BoxChange multInForImageSmooth.In4
- connect refresh.BoxChange multInForImageSmooth.In5
+# connect refresh.BoxChange multInForImageSmooth.In4
+ connect sliceSlider.BoxChange multInForImageSmooth.In5
new MultipleInputs multInForSurfaceThreshold
- connect refresh.BoxChange multInForSurfaceThreshold.In1
+# 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 refresh.BoxChange multInForSurfaceSmooth.In1
+ connect lowerOpacitySlider.BoxChange multInForSurfaceSmooth.In1
connect colourSmooth.BoxChange multInForSurfaceSmooth.In2
-
- connect multInForImageOriginal.BoxChange viewer2DImageOriginal.BoxExecute
+ 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
+
+ connect multInForSurfaceThreshold.BoxChange viewer3DSurfaceThreshold.BoxExecute
+ connect multInForSurfaceSmooth.BoxChange viewer3DSurfaceSmooth.BoxExecute