X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fvtk%2Fsrc%2FbbvtkSegmentationConnectivity.cxx;h=3b28389b314c7ba907561d6707610220205a9f43;hb=5e45ba6586eff364b295a5477d7af4d44af83a7e;hp=679e0706aa5530eb68a30d28860d995f98e7ac86;hpb=00f00242cd642b58fc8281ad88c010656c519cbf;p=bbtk.git diff --git a/packages/vtk/src/bbvtkSegmentationConnectivity.cxx b/packages/vtk/src/bbvtkSegmentationConnectivity.cxx index 679e070..3b28389 100644 --- a/packages/vtk/src/bbvtkSegmentationConnectivity.cxx +++ b/packages/vtk/src/bbvtkSegmentationConnectivity.cxx @@ -43,6 +43,8 @@ #include "bbvtkSegmentationConnectivity.h" #include "bbvtkPackage.h" +#include "bbtkStaticLecture.h" + namespace bbvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SegmentationConnectivity); @@ -54,7 +56,7 @@ namespace bbvtk void SegmentationConnectivity::bbUserSetDefaultValues() { thresh2 = NULL; - cast2 = NULL; +// cast2 = NULL; connect2 = NULL; cast4 = NULL; @@ -69,12 +71,32 @@ namespace bbvtk threshold.push_back(0); bbSetInputThresholdMinMax(threshold); bbSetOutputOut(NULL); + + bbSetInputOutputFormat("SAME"); + bbSetInputValue(255); + + } // -------------------------------------------------------------- void SegmentationConnectivity::bbUserInitializeProcessing() { + + thresh2 = vtkImageThreshold::New(); + thresh2->SetInValue(255); + thresh2->SetOutputScalarTypeToUnsignedChar(); + connect2 = vtkImageSeedConnectivity::New(); + connect2->SetInput(thresh2->GetOutput()); + connect2->SetInputConnectValue(255); + connect2->SetOutputConnectedValue( 255 ); + connect2->SetOutputUnconnectedValue(0); + cast4 = vtkImageCast::New(); + cast4->SetInput(connect2->GetOutput()); + +// EED 2016 06 15 + +/* thresh2 = vtkImageThreshold::New(); thresh2->SetInValue(255); thresh2->SetOutputScalarTypeToUnsignedShort(); @@ -90,6 +112,8 @@ namespace bbvtk cast4 = vtkImageCast::New(); cast4->SetInput(connect2->GetOutput()); cast4->SetOutputScalarTypeToUnsignedShort(); +*/ + } // -------------------------------------------------------------- @@ -101,11 +125,11 @@ namespace bbvtk thresh2->Delete(); thresh2=NULL; } - if (cast2!=NULL) - { - cast2->Delete(); - cast2=NULL; - } +// if (cast2!=NULL) +// { +// cast2->Delete(); +// cast2=NULL; +// } if (connect2!=NULL) { connect2->Delete(); @@ -118,46 +142,63 @@ namespace bbvtk } } + + + // -------------------------------------------------------------- void SegmentationConnectivity::DoProcess() { - vtkImageData *imagedata = bbGetInputIn(); - imagedata->UpdateInformation(); - imagedata->SetUpdateExtent(imagedata->GetWholeExtent()); - imagedata->Update(); - thresh2->ThresholdBetween(3000, 3001); - thresh2->SetInput(imagedata); - thresh2->ThresholdBetween(bbGetInputThresholdMinMax()[0], bbGetInputThresholdMinMax()[1]); - thresh2->Modified(); - thresh2->Update(); - cast2->Modified(); - cast2->Update(); - connect2->RemoveAllSeeds (); - - int x = bbGetInputPositionXYZ()[0]; - int y = bbGetInputPositionXYZ()[1]; - int z = bbGetInputPositionXYZ()[2]; - - int ext[6]; - imagedata->GetWholeExtent(ext); - int maxx = ext[1]-ext[0]+1; - int maxy = ext[3]-ext[2]+1; - int maxz = ext[5]-ext[4]+1; - if ( x<0 ) { printf("Warnnig bbtk::vtk::SegmentationConnectivity::DoProcess limites of the image out of range x: %d -> 0 \n",x ); x=0; } - if ( y<0 ) { printf("Warnnig bbtk::vtk::SegmentationConnectivity::DoProcess limites of the image out of range y: %d -> 0 \n",y ); y=0;} - if ( z<0 ) { printf("Warnnig bbtk::vtk::SegmentationConnectivity::DoProcess limites of the image out of range z: %d -> 0 \n",z ); z=0;} - - if ( x>=maxx ) { printf("Warnnig bbtk::vtk::SegmentationConnectivity::DoProcess limites of the image out of range x: %d -> %d \n",x, maxx-1 ); x=maxx-1; } - if ( y>=maxy ) { printf("Warnnig bbtk::vtk::SegmentationConnectivity::DoProcess limites of the image out of range y: %d -> %d \n",y, maxy-1 ); y=maxy-1; } - if ( z>=maxz ) { printf("Warnnig bbtk::vtk::SegmentationConnectivity::DoProcess limites of the image out of range z: %d -> %d \n",y, maxz-1 ); z=maxz-1; } - connect2->AddSeed( x,y,z ); - connect2->Modified(); - connect2->Update(); - cast4->Update(); - bbSetOutputOut(cast4->GetOutput() ); - } + int x,y,z; + int i,numPoints = bbGetInputPositionXYZ().size()/3; + int verif = (bbGetInputPositionXYZ().size()-1) % 3; + if (( numPoints>=1) && (verif==2) && (bbGetInputIn()!=NULL)) + { + int outputformat = bbtkStaticLecture::GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() ); + vtkImageData *imagedata = bbGetInputIn(); + imagedata->UpdateInformation(); + imagedata->SetUpdateExtent(imagedata->GetWholeExtent()); + imagedata->Update(); + thresh2->ThresholdBetween(3000, 3001); + thresh2->SetInput(imagedata); + thresh2->ThresholdBetween(bbGetInputThresholdMinMax()[0], bbGetInputThresholdMinMax()[1]); + thresh2->Modified(); + thresh2->Update(); + connect2->RemoveAllSeeds (); + + int ext[6]; + imagedata->GetWholeExtent(ext); + int maxX = ext[1]-ext[0]+1; + int maxY = ext[3]-ext[2]+1; + int maxZ = ext[5]-ext[4]+1; + + for (i=0;i=0) || (x=0) || (y=0) || (zAddSeed( x,y,z ); + } else { + printf("EED WARNNIG! In box: SegmentationConnectivity point out of range \n"); + } // if point inside image + + } // for i + connect2->SetOutputConnectedValue( bbGetInputValue() ); + cast4->SetOutputScalarType( outputformat ); + connect2->Modified(); + connect2->Update(); + cast4->Update(); + bbSetOutputOut(cast4->GetOutput() ); + } else { + printf("EED WARNNIG! In box: SegmentationConnectivity List of points are not coherent. \n"); + bbSetOutputOut( NULL ); + }// if numPoints verif + +} + }// EO namespace bbvtk