#include "bbcreaVtkImageConnectivityFilter.h"
#include "bbcreaVtkPackage.h"
+#include <vtkPolyData.h>
+#include <vtkPoints.h>
+#include <vtkPointData.h>
+
namespace bbcreaVtk
{
// (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')
-
-
- if (bbGetInputIn()!=NULL){
+
+ if (bbGetInputIn()!=NULL)
+ {
if (imgConnfilter) {imgConnfilter->Delete();}
imgConnfilter=vtkImageConnectivityFilter::New();
- imgConnfilter->SetInputData( bbGetInputIn() );
+ imgConnfilter->SetInputData( bbGetInputIn() );
if (bbGetInputExtractionMode()==0) // LargestRegion
{
imgConnfilter->SetExtractionModeToLargestRegion();
{
printf("EED Warning!!!! ImageConnectivityFilter - AllRegions Not Implemented\n ");
} // ExtractionMode
- if (bbGetInputExtractionMode()==2) // SeededRegions
+ if (bbGetInputExtractionMode()==2) // SeedRegions
{
- printf("EED Warning!!!! ImageConnectivityFilter - SeededRegions Not Implemented\n ");
+ std::vector<double> lstX = bbGetInputLstX();
+ std::vector<double> lstY = bbGetInputLstY();
+ std::vector<double> lstZ = bbGetInputLstZ();
+ int size = lstX.size();
+ if ( (lstX.size()>0) && (lstX.size()==lstY.size()) && (lstX.size()==lstZ.size()) )
+ {
+ int i;
+ double p[3];
+ vtkPoints *points = vtkPoints::New();
+ for (i=0; i<size; i++)
+ {
+ p[0] = lstX[i];
+ p[1] = lstY[i];
+ p[2] = lstZ[i];
+ points->InsertNextPoint(p);
+ } // for i
+ vtkPolyData *seedData = vtkPolyData::New();
+ seedData->SetPoints( points );
+// vtkUnsignedCharArray *seedScalars = vtkUnsignedCharArray::New();
+// seedScalars->InsertNextValue(100);
+// seedData->GetPointData()->SetScalars(seedScalars);
+ seedData->GetPointData()->SetScalars(nullptr);
+
+ imgConnfilter->SetExtractionModeToSeededRegions();
+ imgConnfilter->SetSeedData( seedData );
+// imgConnfilter->SetSizeRange(0, 99);
+ } // if lst
+
} // ExtractionMode
if (bbGetInputScalarRange().size()==2)
{
imgConnfilter->SetScalarRange( bbGetInputScalarRange()[0], bbGetInputScalarRange()[1] );
} // Range
- imgConnfilter->Update();
+ imgConnfilter->Update( );
bbSetOutputOut( imgConnfilter->GetOutput() );
} else {
printf("EED Warning!!!! ImageConnectivityFilter - Input image not defined.\n ");
}// In
-
}
//=====
// 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(In,vtkImageData*);
BBTK_DECLARE_INPUT(ExtractionMode,int);
BBTK_DECLARE_INPUT(ScalarRange,std::vector< double >);
+ BBTK_DECLARE_INPUT(LstX,std::vector< double >);
+ BBTK_DECLARE_INPUT(LstY,std::vector< double >);
+ BBTK_DECLARE_INPUT(LstZ,std::vector< double >);
BBTK_DECLARE_OUTPUT(Out,vtkImageData*);
BBTK_PROCESS(Process);
BBTK_CATEGORY("empty");
BBTK_INPUT(ImageConnectivityFilter,In,"Input image",vtkImageData*,"");
- BBTK_INPUT(ImageConnectivityFilter,ExtractionMode,"(default 0) 0=LargestRegion 1=AllRegions 2=SeededRegions",int,"");
+ BBTK_INPUT(ImageConnectivityFilter,ExtractionMode,"(default 0) 0=LargestRegion, 1=AllRegions, 2=SeededRegions use LstX LstY LstZ,",int,"");
BBTK_INPUT(ImageConnectivityFilter,ScalarRange,"threshold [Min Max]",std::vector< double >,"");
+ BBTK_INPUT(ImageConnectivityFilter,LstX,"list X",std::vector< double >,"");
+ BBTK_INPUT(ImageConnectivityFilter,LstY,"list Y",std::vector< double >,"");
+ BBTK_INPUT(ImageConnectivityFilter,LstZ,"list Z",std::vector< double >,"");
BBTK_OUTPUT(ImageConnectivityFilter,Out,"Output image",vtkImageData*,"");
//=====
#include "bbcreaVtkImageThresholdConnectivity.h"
#include "bbcreaVtkPackage.h"
+#include "vtkImageThresholdConnectivity.h"
+#include "vtkPoints.h"
+
namespace bbcreaVtk
{
//=====
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
// * 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
// 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(In,vtkImageData*);
+ BBTK_DECLARE_INPUT(Point,std::vector<int>);
+ BBTK_DECLARE_INPUT(LstX,std::vector<int>);
+ BBTK_DECLARE_INPUT(LstY,std::vector<int>);
+ BBTK_DECLARE_INPUT(LstZ,std::vector<int>);
+ BBTK_DECLARE_INPUT(MaskValue,std::vector<double>);
+ BBTK_DECLARE_INPUT(Border,int);
BBTK_DECLARE_OUTPUT(Out,vtkImageData*);
BBTK_PROCESS(Process);
void Process();
BBTK_CATEGORY("empty");
BBTK_INPUT(ImageThresholdConnectivity,In,"Input image",vtkImageData*,"");
+ BBTK_INPUT(ImageThresholdConnectivity,Point,"[x y z] seed point",std::vector<int>,"");
+ BBTK_INPUT(ImageThresholdConnectivity,LstX,"LstX seeds in voxels",std::vector<int>,"");
+ BBTK_INPUT(ImageThresholdConnectivity,LstY,"LstY seeds in voxels",std::vector<int>,"");
+ BBTK_INPUT(ImageThresholdConnectivity,LstZ,"LstZ seeds in voxels",std::vector<int>,"");
+ BBTK_INPUT(ImageThresholdConnectivity,MaskValue,"( default [O 255] ) [Out In] values of the output mask",std::vector<double>,"");
+ BBTK_INPUT(ImageThresholdConnectivity,Border,"(default 10)Border of the min and max positions",int,"");
BBTK_OUTPUT(ImageThresholdConnectivity,Out,"Output image",vtkImageData*,"");