]> Creatis software - creaVtk.git/blobdiff - bbtk_creaVtk_PKG/src/bbcreaVtkImageThresholdConnectivity.cxx
#3498 Connectivity Filter Threshold
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkImageThresholdConnectivity.cxx
index 71366434d86e5184c05c28be6b201ca48bbb589d..a7ddb49608e71098de98f90c15ea79e3b94cbb09 100644 (file)
@@ -3,6 +3,9 @@
 //===== 
 #include "bbcreaVtkImageThresholdConnectivity.h"
 #include "bbcreaVtkPackage.h"
+#include "vtkImageThresholdConnectivity.h"
+#include "vtkPoints.h"
+
 namespace bbcreaVtk
 {
 
@@ -13,7 +16,6 @@ BBTK_BLACK_BOX_IMPLEMENTATION(ImageThresholdConnectivity,bbtk::AtomicBlackBox);
 //===== 
 void ImageThresholdConnectivity::Process()
 {
-
 // THE MAIN PROCESSING METHOD BODY
 //   Here we simply set the input 'In' value to the output 'Out'
 //   And print out the output value
@@ -26,49 +28,103 @@ void ImageThresholdConnectivity::Process()
 //    * TYPE is the C++ type of the input/output
 //      (the one provided in the attribute 'type' of the tag 'input')
 
-  
-       printf("EED ImageThresholdConnectivity::Process  Error this box is not implemented .... \n");
-       printf("EED ImageThresholdConnectivity::Process  Error this box is not implemented .... \n");
-       printf("EED ImageThresholdConnectivity::Process  Error this box is not implemented .... \n");
-       printf("EED ImageThresholdConnectivity::Process  Error this box is not implemented .... \n");
+    std::vector<int> lstX;
+    std::vector<int> lstY;
+    std::vector<int> lstZ;
+    std::vector<int> point = bbGetInputPoint();
+
+    if (bbGetInputPoint().size()==3)
+    {
+        lstX.push_back( point[0] );
+        lstY.push_back( point[1] );
+        lstZ.push_back( point[2] );
+    } else {
+        lstX = bbGetInputLstX();
+        lstY = bbGetInputLstY();
+        lstZ = bbGetInputLstZ();
+    }
+    
+    if ( (bbGetInputIn()!=NULL) && (lstX.size()>0) && (lstX.size()==lstY.size()) && (lstX.size()==lstZ.size()) )
+    {
+        vtkImageThresholdConnectivity *filter = vtkImageThresholdConnectivity::New();
+        double spc[3];
+        bbGetInputIn()->GetSpacing(spc);
+        int border  = bbGetInputBorder();
+        int minX    = 32000;
+        int minY    = 32000;
+        int minZ    = 32000;
+        int maxX    = -32000;
+        int maxY    = -32000;
+        int maxZ    = -32000;
+        int i,size  = lstX.size();
+        double p[3];
+        vtkPoints *points = vtkPoints::New();
+        for (i=0; i<size; i++)
+        {
+            p[0] = lstX[i]*spc[0];
+            p[1] = lstY[i]*spc[1];
+            p[2] = lstZ[i]*spc[2];
+            points->InsertNextPoint(p);
+            if ( lstX[i] < minX ) { minX = lstX[i]; }
+            if ( lstY[i] < minY ) { minY = lstY[i]; }
+            if ( lstZ[i] < minZ ) { minZ = lstZ[i]; }
+            if ( lstX[i] > maxX ) { maxX = lstX[i]; }
+            if ( lstY[i] > maxY ) { maxY = lstY[i]; }
+            if ( lstZ[i] > maxZ ) { maxZ = lstZ[i]; }
+        } // for i
+        filter->SetSeedPoints( points );
+        filter->SetInputData( bbGetInputIn() );
+        filter->ThresholdBetween(10, 100);
+    //    filter->SetNeighborhoodRadius (4, 4, 4 );
+        filter->SetInValue(255);
+        filter->SetOutValue(0);
+    //    filter->ReplaceInOn();
+    //    filter->ReplaceOutOn();
+        filter->SetSliceRangeX(minX-border,maxX+border);
+        filter->SetSliceRangeY(minY-border,maxY+border);
+        filter->SetSliceRangeZ(minZ-border,maxZ+border);
+        filter->Update();
+        bbSetOutputOut( filter->GetOutput() );
+    } // if lst
 }
 //===== 
 // 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 ImageThresholdConnectivity::bbUserSetDefaultValues()
 {
-
 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
 //    Here we initialize the input 'In' to 0
-   bbSetInputIn(NULL);
-  
+    bbSetInputIn(NULL);
+    bbSetInputBorder(10);
+    std::vector<double> maskValue;
+    maskValue.push_back(0);
+    maskValue.push_back(255);
+    bbSetInputMaskValue(maskValue);
+
 }
+
 //===== 
 // 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 ImageThresholdConnectivity::bbUserInitializeProcessing()
 {
-
 //  THE INITIALIZATION METHOD BODY :
 //    Here does nothing 
 //    but this is where you should allocate the internal/output pointers 
-//    if any 
-
-  
+//    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 ImageThresholdConnectivity::bbUserFinalizeProcessing()
 {
-
 //  THE FINALIZATION METHOD BODY :
 //    Here does nothing 
 //    but this is where you should desallocate the internal/output pointers 
 //    if any
-  
-}
 }
-// EO namespace bbcreaVtk
+
+}// EO namespace bbcreaVtk