From 0a5e5c357c23f6986462e776fcc333824be0da8f Mon Sep 17 00:00:00 2001 From: espinosa Date: Fri, 19 Jun 2015 16:33:45 +0200 Subject: [PATCH] #2660 creaVtk Feature New Normal - New cutImageSegmentation --- .../bbcreaVtkCutImageSectorSegmentation.cxx | 87 +++++++ .../src/bbcreaVtkCutImageSectorSegmentation.h | 51 ++++ lib/creaVtk/cutImageSegmentation.cpp | 225 ++++++++++++++++++ lib/creaVtk/cutImageSegmentation.h | 94 ++++++++ 4 files changed, 457 insertions(+) create mode 100644 bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.cxx create mode 100644 bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.h create mode 100644 lib/creaVtk/cutImageSegmentation.cpp create mode 100644 lib/creaVtk/cutImageSegmentation.h diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.cxx new file mode 100644 index 0000000..6720290 --- /dev/null +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.cxx @@ -0,0 +1,87 @@ +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +#include "bbcreaVtkCutImageSectorSegmentation.h" +#include "bbcreaVtkPackage.h" + +#include "cutImageSegmentation.h" + + +namespace bbcreaVtk +{ + +BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaVtk,CutImageSectorSegmentation) +BBTK_BLACK_BOX_IMPLEMENTATION(CutImageSectorSegmentation,bbtk::AtomicBlackBox); +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +void CutImageSectorSegmentation::Process() +{ + +// THE MAIN PROCESSING METHOD BODY +// Here we simply set the input 'In' value to the output 'Out' +// And print out the output value +// INPUT/OUTPUT ACCESSORS ARE OF THE FORM : +// void bbSet{Input|Output}NAME(const TYPE&) +// const TYPE& bbGet{Input|Output}NAME() const +// Where : +// * NAME is the name of the input/output +// (the one provided in the attribute 'name' of the tag 'input') +// * TYPE is the C++ type of the input/output +// (the one provided in the attribute 'type' of the tag 'input') + cutImageSegmentation cis; + + cis.SetAnglesImage(bbGetInputImage()); + cis.SetMesh1(bbGetInputMesh1()); + + + cis.Process(); + + bbSetOutputResultImage(cis.GetResultImage()); + + + +} +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +void CutImageSectorSegmentation::bbUserSetDefaultValues() +{ + +// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX +// Here we initialize the input 'In' to 0 + bbSetInputImage(NULL); + bbSetInputMesh1(NULL); + + + +} +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +void CutImageSectorSegmentation::bbUserInitializeProcessing() +{ + +// THE INITIALIZATION METHOD BODY : +// Here does nothing +// but this is where you should allocate the internal/output pointers +// if any + + +} +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +void CutImageSectorSegmentation::bbUserFinalizeProcessing() +{ + +// THE FINALIZATION METHOD BODY : +// Here does nothing +// but this is where you should desallocate the internal/output pointers +// if any + +} +} +// EO namespace bbcreaVtk + + diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.h b/bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.h new file mode 100644 index 0000000..d492527 --- /dev/null +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkCutImageSectorSegmentation.h @@ -0,0 +1,51 @@ +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +#ifndef __bbcreaVtkCutImageSectorSegmentation_h_INCLUDED__ +#define __bbcreaVtkCutImageSectorSegmentation_h_INCLUDED__ +#include "bbcreaVtk_EXPORT.h" +#include "bbtkAtomicBlackBox.h" + +#include "vtkImageData.h" +#include "vtkPolyData.h" + +#include "iostream" + +namespace bbcreaVtk +{ + +class bbcreaVtk_EXPORT CutImageSectorSegmentation + : + public bbtk::AtomicBlackBox +{ + BBTK_BLACK_BOX_INTERFACE(CutImageSectorSegmentation,bbtk::AtomicBlackBox); +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== + BBTK_DECLARE_INPUT(Image,vtkImageData*); + BBTK_DECLARE_INPUT(Mesh1,vtkPolyData*); + BBTK_DECLARE_OUTPUT(ResultImage,vtkImageData*); + BBTK_PROCESS(Process); + void Process(); +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +}; + +BBTK_BEGIN_DESCRIBE_BLACK_BOX(CutImageSectorSegmentation,bbtk::AtomicBlackBox); +BBTK_NAME("CutImageSectorSegmentation"); +BBTK_AUTHOR("Monica ESPINOSA"); +BBTK_DESCRIPTION("No Description."); +BBTK_CATEGORY("empty"); +BBTK_INPUT(CutImageSectorSegmentation,Image,"Angles Image ",vtkImageData*,""); +BBTK_INPUT(CutImageSectorSegmentation,Mesh1,"Sector",vtkPolyData*,""); +BBTK_OUTPUT(CutImageSectorSegmentation,ResultImage,"Result Image",vtkImageData*,""); +BBTK_END_DESCRIBE_BLACK_BOX(CutImageSectorSegmentation); +//===== +// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) +//===== +} +// EO namespace bbcreaVtk + +#endif // __bbcreaVtkCutImageSectorSegmentation_h_INCLUDED__ + diff --git a/lib/creaVtk/cutImageSegmentation.cpp b/lib/creaVtk/cutImageSegmentation.cpp new file mode 100644 index 0000000..4fa20ca --- /dev/null +++ b/lib/creaVtk/cutImageSegmentation.cpp @@ -0,0 +1,225 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sante) +# 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. +# ------------------------------------------------------------------------ +*/ + +#include "cutImageSegmentation.h" + +cutImageSegmentation::cutImageSegmentation() +{ +} + +cutImageSegmentation::~cutImageSegmentation() +{ +} + +void cutImageSegmentation::SetAnglesImage( vtkImageData* image ) +{ + this->m_Image = image; +} + +void cutImageSegmentation::SetMesh1(vtkPolyData* mesh) +{ + this->m_Mesh1 = mesh; +} + +vtkImageData* +cutImageSegmentation::GetResultImage() +{ + return m_ResultImage; +} + +void cutImageSegmentation::InitValues() +{ + + +} + +void cutImageSegmentation::Process() +{ + std::cout << "MLER cutImageSegmentation :: Process Start()" << std::endl; + + if(m_Mesh1 != NULL) + { + + vtkLinearExtrusionFilter *extrude = vtkLinearExtrusionFilter::New(); + vtkPolyDataToImageStencil *dataToStencil = vtkPolyDataToImageStencil::New(); + vtkImageStencil *imageStencil = vtkImageStencil::New(); + //vtkExtractVOI *extract = vtkExtractVOI::New(); + vtkAppendPolyData *append = vtkAppendPolyData::New(); + //vtkTriangleFilter *triangleFilter = vtkTriangleFilter::New(); + vtkStripper *stripper = vtkStripper::New(); + vtkTransformPolyDataFilter *transformFilter= vtkTransformPolyDataFilter::New(); + + double bounds[6]; + + //vtkPolyDataToImageStencil* stencil = vtkPolyDataToImageStencil::New(); + /* Test # 1 Cod Python + extract->SetVOI( 0, 128, 0, 104, 0, 9); + extract->SetSampleRate(1, 1, 1); + extract->SetInput(m_Image); + extract->ReleaseDataFlagOff(); + + + extrude->SetInput(m_Mesh1); + extrude->SetScaleFactor(1); + extrude->SetExtrusionTypeToNormalExtrusion(); + extrude->SetVector(0,0,1); + //extrude->Update(); + + extrude->Print(std::cout); + + std::cout << "MLER cutImageSegmentation ---> polygonal data --> image stencil:" << std::endl; + + //dataToStencil->SetTolerance(0); + dataToStencil->SetInput(extrude->GetOutput()); + //dataToStencil->SetOutputSpacing(m_Image->GetSpacing()); + //dataToStencil->SetOutputWholeExtent(m_Image->GetExtent()); + //dataToStencil->Update(); + + dataToStencil->Print(std::cout); + + imageStencil->SetInput(extract->GetOutput()); + imageStencil->SetStencil(dataToStencil->GetOutput()); + + imageStencil->ReverseStencilOff(); + imageStencil->SetBackgroundValue(128); + imageStencil->Update(); + + imageStencil->Print(std::cout); + + m_ResultImage = imageStencil->GetOutput(); + */ + + /*Test #2 + stripper->SetInput(m_Mesh1); + transformFilter->SetInput(stripper->GetOutput()); + + dataToStencil->SetOutputOrigin(m_Image->GetOrigin()); + dataToStencil->SetOutputSpacing(m_Image->GetSpacing()); + dataToStencil->SetOutputWholeExtent(m_Image->GetExtent()); + + dataToStencil->SetInput(transformFilter->GetOutput()); + + imageStencil->SetInput(m_Image); + imageStencil->SetStencil(dataToStencil->GetOutput()); + imageStencil->Update(); + + m_ResultImage = imageStencil->GetOutput(); + */ + + //Test 3 + /* + m_Mesh1->GetBounds(bounds); + + dataToStencil->SetInput(m_Mesh1); + dataToStencil->SetOutputOrigin(m_Image->GetOrigin()); + dataToStencil->SetOutputSpacing(m_Image->GetSpacing()); + dataToStencil->SetOutputWholeExtent(m_Image->GetExtent()); + dataToStencil->Update(); + + imageStencil->SetInput(m_Image); + imageStencil->SetStencil(dataToStencil->GetOutput()); + imageStencil->ReverseStencilOff(); + //imageStencil->SetBackgroundValue(100); + imageStencil->Update(); + */ + + //Test 4 + m_Mesh1->GetBounds(bounds); + + std::cout << "bounds 0:" << bounds[0]<< std::endl; + std::cout << "bounds 1:" << bounds[1]<< std::endl; + std::cout << "bounds 2:" << bounds[2]<< std::endl; + std::cout << "bounds 3:" << bounds[3]<< std::endl; + std::cout << "bounds 4:" << bounds[4]<< std::endl; + std::cout << "bounds 5:" << bounds[5]<< std::endl; + + + + double origin[3]; + double *spacing = NULL; + spacing = m_Image->GetSpacing(); + + std::cout << "spacing 0:" << spacing[0]<< std::endl; + std::cout << "spacing 1:" << spacing[1]<< std::endl; + std::cout << "spacing 2:" << spacing[2]<< std::endl; + + origin[0] = 63;//bounds[0]; + origin[1] = 44;//bounds[2]; + origin[2] = 4;//bounds[4]; + + std::cout << "origin;0:" << origin[0]<< std::endl; + std::cout << "origin 1:" << origin[1]<< std::endl; + std::cout << "origin 2:" << origin[2]<< std::endl; + + + m_Image->SetOrigin(origin); + + + extrude->SetInput(m_Mesh1); + extrude->SetScaleFactor(1); + extrude->SetExtrusionTypeToNormalExtrusion(); + extrude->SetVector(0,0,1); + extrude->Update(); + + dataToStencil->SetTolerance(0); + dataToStencil->SetInput(extrude->GetOutput()); + dataToStencil->SetOutputOrigin(origin); + dataToStencil->SetOutputSpacing(spacing); + dataToStencil->SetOutputWholeExtent(m_Image->GetExtent()); + dataToStencil->Update(); + + imageStencil->SetInput(m_Image); + imageStencil->SetStencil(dataToStencil->GetOutput()); + imageStencil->ReverseStencilOff(); + imageStencil->SetBackgroundValue(0); + imageStencil->Update(); + + m_ResultImage = imageStencil->GetOutput(); + + + }//i m_Mesh1 != Null + else{ + + std::cout << "MLER cutImageSegmentation :: NO HAY MESH" << std::endl; + + }//else if m_Mesh1 + + std::cout << "MLER cutImageSegmentation :: Process End" << std::endl; + +} + +//--------------------------------------------- +//Method template +//--------------------------------------------- +/* +void cutImageSegmentation::FunctionName(int& parameterA) +{ + parameterA = 2 * parameterA; + return; +} +*/ + diff --git a/lib/creaVtk/cutImageSegmentation.h b/lib/creaVtk/cutImageSegmentation.h new file mode 100644 index 0000000..fa97e05 --- /dev/null +++ b/lib/creaVtk/cutImageSegmentation.h @@ -0,0 +1,94 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sante) +# 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. +# ------------------------------------------------------------------------ +*/ + +#ifndef _CUTIMAGESEGMENTATION_H_ +#define _CUTIMAGESEGMENTATION_H_ + +#include "vtkImageData.h" +#include "vtkPolyData.h" +#include "vtkLinearExtrusionFilter.h" +#include "vtkPolyDataToImageStencil.h" +#include "vtkImageStencil.h" +//#include "vtkExtractVOI.h" +#include "vtkAppendPolyData.h" +//#include "vtkTriangleFilter" +#include "vtkStripper.h" +#include "vtkTransformPolyDataFilter.h" +#include +//#include + +//#include "HeartAngles.h" +//--------------------------------------------- +// Class Name: cutImageSegmentation +// [classdescription] +//--------------------------------------------- + +class cutImageSegmentation +{ + +//--------------------------------------------- +//Methods and attributes exposed to other classes +//--------------------------------------------- +public : + cutImageSegmentation(); + ~cutImageSegmentation(); + + void SetAnglesImage ( vtkImageData* image ); + void SetMesh1 ( vtkPolyData* mesh ); + + vtkImageData* GetResultImage(); + + void InitValues(); + + void Process(); + + +//--Method template---------------------------- +// void FunctionName(int& parameterA); + + +//--------------------------------------------- +//Methods and attributes exposed only to classes +//that are derived from this class +//--------------------------------------------- +protected: + +//--------------------------------------------- +//Methods and attributes only visible by this class +//--------------------------------------------- +private: + + vtkImageData* m_Image; + vtkPolyData* m_Mesh1; + + vtkImageData* m_ResultImage; + + //HeartAngles ha; +}; + +//-end of _cutImageSegmentation_H_------------------------------------------------------ +#endif -- 2.47.1