X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fdemo%2Fbbs%2Fappli%2FdemoFiltering1.bbs;h=6639ad3a06279c3816a2632d9907c160885a5eee;hb=cfad95b6e08e6e53846ffcda7fbc5932065f2c47;hp=109973696aaa092f0a98c9533deca60c756467bb;hpb=6575a389b71b1b85c79e4444885becb76ecf16e4;p=bbtk.git diff --git a/packages/demo/bbs/appli/demoFiltering1.bbs b/packages/demo/bbs/appli/demoFiltering1.bbs index 1099736..6639ad3 100644 --- a/packages/demo/bbs/appli/demoFiltering1.bbs +++ b/packages/demo/bbs/appli/demoFiltering1.bbs @@ -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