void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString distanc, wxString sigm, wxString alf, wxString bet, wxString prop, wxString iter, wxString inflation)
{
-
int typeofcontour = 1;
//Image Data
vtkImageData *imagedata = getImageData();
//Tipo de pixeles a utilizar internamente en ITK
- typedef float InternalPixelType;
- const unsigned int Dimension = 2;
- typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
+ typedef float InternalPixelType;
+ const unsigned int Dimension = 2;
+ typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
- //Tipo de pixeles de salida 1
- typedef unsigned char OutputPixelType;
- typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
+ //Tipo de pixeles de salida 1
+ typedef unsigned char OutputPixelType;
+ typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
- //Tipo de pixeles de salida 2
- typedef unsigned short OutputPixelType2;
- typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
+ //Tipo de pixeles de salida 2
+ typedef unsigned short OutputPixelType2;
+ typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
- //DefiniciÛn del thresholder
- typedef itk::BinaryThresholdImageFilter<
- InternalImageType,
- OutputImageType > ThresholdingFilterType;
-
- //DefiniciÛn del primer filtro de conversiÛn de pixeles
- typedef itk::CastImageFilter<
- OutputImageType, OutputImageType2 > CastFilterType;
+ //DefiniciÛn del thresholder
+ typedef itk::BinaryThresholdImageFilter<
+ InternalImageType,
+ OutputImageType > ThresholdingFilterType;
+
+ //DefiniciÛn del primer filtro de conversiÛn de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType, OutputImageType2 > CastFilterType;
- //DefiniciÛn del segundo tipo de conversiÛn de pixeles
- typedef itk::CastImageFilter<
- OutputImageType2, InternalImageType > CastFilterType2;
+ //DefiniciÛn del segundo tipo de conversiÛn de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType2, InternalImageType > CastFilterType2;
- //Tercer tipo de conversiÛn
- typedef itk::RescaleIntensityImageFilter<
- InternalImageType,
- OutputImageType > CastFilterType3;
+ //Tercer tipo de conversiÛn
+ typedef itk::RescaleIntensityImageFilter<
+ InternalImageType,
+ OutputImageType > CastFilterType3;
- //Cuarto tipo de conversiÛn
- typedef itk::RescaleIntensityImageFilter<
- OutputImageType,
- OutputImageType > CastFilterType4;
+ //Cuarto tipo de conversiÛn
+ typedef itk::RescaleIntensityImageFilter<
+ OutputImageType,
+ OutputImageType > CastFilterType4;
- ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
-
- thresholder->SetLowerThreshold( 0.0 );
- thresholder->SetUpperThreshold( 128 );
+ ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
+
+ thresholder->SetLowerThreshold( 0.0 );
+ thresholder->SetUpperThreshold( 128 );
- thresholder->SetOutsideValue( 255 );
- thresholder->SetInsideValue( 0 );
+ thresholder->SetOutsideValue( 255 );
+ thresholder->SetInsideValue( 0 );
- //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
- typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
- typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
- typedef itk::ImageFileWriter< OutputImageType > WriterType;
+ //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
+ typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
+ typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
+ typedef itk::ImageFileWriter< OutputImageType > WriterType;
- ConnectorType::Pointer connector= ConnectorType::New();
- ConnectorType2::Pointer connector2= ConnectorType2::New();
-
+ ConnectorType::Pointer connector= ConnectorType::New();
+ ConnectorType2::Pointer connector2= ConnectorType2::New();
+
- CastFilterType::Pointer filter=CastFilterType::New();
- CastFilterType2::Pointer filter2=CastFilterType2::New();
+ CastFilterType::Pointer filter=CastFilterType::New();
+ CastFilterType2::Pointer filter2=CastFilterType2::New();
- connector->SetInput( imagedata );
- filter2->SetInput(connector->GetOutput());
+ connector->SetInput( imagedata );
+ filter2->SetInput(connector->GetOutput());
- typedef itk::CurvatureAnisotropicDiffusionImageFilter<
- InternalImageType,
- InternalImageType > SmoothingFilterType;
+ typedef itk::CurvatureAnisotropicDiffusionImageFilter<
+ InternalImageType,
+ InternalImageType > SmoothingFilterType;
- SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
+ SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
- typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
- InternalImageType,
- InternalImageType > GradientFilterType;
+ typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
+ InternalImageType,
+ InternalImageType > GradientFilterType;
- typedef itk::SigmoidImageFilter<
- InternalImageType,
- InternalImageType > SigmoidFilterType;
+ typedef itk::SigmoidImageFilter<
+ InternalImageType,
+ InternalImageType > SigmoidFilterType;
- GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
+ GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
- SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
+ SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
- sigmoid->SetOutputMinimum( 0.0 );
- sigmoid->SetOutputMaximum( 255.0 );
+ sigmoid->SetOutputMinimum( 0.0 );
+ sigmoid->SetOutputMaximum( 255.0 );
- typedef itk::FastMarchingImageFilter<
- InternalImageType,
- InternalImageType > FastMarchingFilterType;
+ typedef itk::FastMarchingImageFilter<
+ InternalImageType,
+ InternalImageType > FastMarchingFilterType;
- FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();
+ FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();
- typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
- InternalImageType > GeodesicActiveContourFilterType;
- GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
- GeodesicActiveContourFilterType::New();
+ typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
+ InternalImageType > GeodesicActiveContourFilterType;
+ GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
+ GeodesicActiveContourFilterType::New();
- typedef itk::ZeroCrossingImageFilter<
- InternalImageType,
- InternalImageType > ZeroCrossingFilterType;
-ZeroCrossingFilterType::Pointer zeroCrossing =
- ZeroCrossingFilterType::New();
+ typedef itk::ZeroCrossingImageFilter<
+ InternalImageType,
+ InternalImageType > ZeroCrossingFilterType;
+ ZeroCrossingFilterType::Pointer zeroCrossing =
+ ZeroCrossingFilterType::New();
-const double propagationScaling = atof( crea::wx2std(prop).c_str() );
+ const double propagationScaling = atof( crea::wx2std(prop).c_str() );
- geodesicActiveContour->SetPropagationScaling( propagationScaling );
- geodesicActiveContour->SetCurvatureScaling( 1.0 );
- geodesicActiveContour->SetAdvectionScaling( 1.0 );
+ geodesicActiveContour->SetPropagationScaling( propagationScaling );
+ geodesicActiveContour->SetCurvatureScaling( 1.0 );
+ geodesicActiveContour->SetAdvectionScaling( 1.0 );
- geodesicActiveContour->SetMaximumRMSError( 0.02 );
- int it=atoi( crea::wx2std(iter).c_str() );
- geodesicActiveContour->SetNumberOfIterations( it );
+ geodesicActiveContour->SetMaximumRMSError( 0.02 );
+ int it=atoi( crea::wx2std(iter).c_str() );
+ geodesicActiveContour->SetNumberOfIterations( it );
- smoothing->SetInput( filter2->GetOutput() );
- gradientMagnitude->SetInput( smoothing->GetOutput() );
- sigmoid->SetInput( gradientMagnitude->GetOutput() );
- fastMarching->SetInput( sigmoid->GetOutput() );
- geodesicActiveContour->SetInput( fastMarching->GetOutput() );
- geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
-
- zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
- //thresholder->SetInput( zeroCrossing->GetOutput() );
- thresholder->SetInput( geodesicActiveContour->GetOutput() );
- connector2->SetInput( thresholder->GetOutput() );
-
+ smoothing->SetInput( filter2->GetOutput() );
+ gradientMagnitude->SetInput( smoothing->GetOutput() );
+ sigmoid->SetInput( gradientMagnitude->GetOutput() );
+ fastMarching->SetInput( sigmoid->GetOutput() );
+ geodesicActiveContour->SetInput( fastMarching->GetOutput() );
+ geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
+
+ zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
+ //thresholder->SetInput( zeroCrossing->GetOutput() );
+ thresholder->SetInput( geodesicActiveContour->GetOutput() );
+ connector2->SetInput( thresholder->GetOutput() );
+
- smoothing->SetTimeStep( 0.125 );
- smoothing->SetNumberOfIterations( 5 );
- smoothing->SetConductanceParameter( 9.0 );
+ smoothing->SetTimeStep( 0.125 );
+ smoothing->SetNumberOfIterations( 5 );
+ smoothing->SetConductanceParameter( 9.0 );
- const double sigma = atof( crea::wx2std(sigm).c_str() );
- gradientMagnitude->SetSigma( sigma );
+ const double sigma = atof( crea::wx2std(sigm).c_str() );
+ gradientMagnitude->SetSigma( sigma );
- const double alpha = atof( crea::wx2std(alf).c_str() );
- const double beta = atof( crea::wx2std(bet).c_str() );
+ const double alpha = atof( crea::wx2std(alf).c_str() );
+ const double beta = atof( crea::wx2std(bet).c_str() );
- sigmoid->SetAlpha( alpha );
- sigmoid->SetBeta( beta );
-
- typedef FastMarchingFilterType::NodeContainer NodeContainer;
- typedef FastMarchingFilterType::NodeType NodeType;
+ sigmoid->SetAlpha( alpha );
+ sigmoid->SetBeta( beta );
+
+ typedef FastMarchingFilterType::NodeContainer NodeContainer;
+ typedef FastMarchingFilterType::NodeType NodeType;
- NodeContainer::Pointer seeds = NodeContainer::New();
+ NodeContainer::Pointer seeds = NodeContainer::New();
- InternalImageType::IndexType seedPosition;
- seedPosition[0] = x;
- seedPosition[1] = y;
+ InternalImageType::IndexType seedPosition;
+ seedPosition[0] = x;
+ seedPosition[1] = y;
- const double initialDistance = atof( crea::wx2std(distanc).c_str() );
+ const double initialDistance = atof( crea::wx2std(distanc).c_str() );
- NodeType node;
+ NodeType node;
- const double seedValue = - initialDistance;
+ const double seedValue = - initialDistance;
- node.SetValue( seedValue );
- node.SetIndex( seedPosition );
-
- seeds->Initialize();
- seeds->InsertElement( 0, node );
-
- fastMarching->SetTrialPoints( seeds );
-
- fastMarching->SetSpeedConstant( 1.0 );
-
- fastMarching->SetOutputSize(
- connector->GetOutput()->GetBufferedRegion().GetSize() );
-
- fastMarching->SetStoppingValue( 800 );
- try
+ node.SetValue( seedValue );
+ node.SetIndex( seedPosition );
+
+ seeds->Initialize();
+ seeds->InsertElement( 0, node );
+
+ fastMarching->SetTrialPoints( seeds );
+
+ fastMarching->SetSpeedConstant( 1.0 );
+
+ fastMarching->SetOutputSize(
+ connector->GetOutput()->GetBufferedRegion().GetSize() );
+
+ fastMarching->SetStoppingValue( 800 );
+ try
{
connector2->Update();
polyDataResult->Update( );
polyDataResult->UpdateInformation();
-//EED
- /*
-ofstream myfile;
-myfile.open ("C:/Creatis/example.txt");
-myfile << "\n";
-polyDataResult->Print(myfile);
-myfile << "-------------------------------------\n";
-polyDataResult->GetLines()->Print(myfile);
-myfile.close();*/
+ //EED
+ /*
+ ofstream myfile;
+ myfile.open ("C:/Creatis/example.txt");
+ myfile << "\n";
+ polyDataResult->Print(myfile);
+ myfile << "-------------------------------------\n";
+ polyDataResult->GetLines()->Print(myfile);
+ myfile.close();*/
cntVTK -> Delete();
cpd -> Delete();
conn -> Delete();
-//--Calculating control points
+ //--Calculating control points
std::vector<double> vecX;
std::vector<double> vecY;
double xAct=0;
double yAct=0;
int ii,size=polyDataResult->GetNumberOfPoints();
-ofstream myfile;
-myfile.open ("C:/Creatis/example2.txt");
+ ofstream myfile;
+ myfile.open ("C:/Creatis/example2.txt");
size=polyDataResult->GetNumberOfPoints();
for (ii=0;ii<size;ii++)
extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
-int method=2;
+ int method=2;
if (method==0){
extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
}