ImageType::Pointer SBFilterUtils::RegionGrowing(ImageType::Pointer image, ImageType::IndexType seed, bool fullConnectivity, int lowerThreshold, int upperThreshold, int replaceValue) { ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New(); connectedThreshold->SetInput(image); connectedThreshold->SetSeed(seed); connectedThreshold->SetLower(lowerThreshold); connectedThreshold->SetUpper(upperThreshold); connectedThreshold->SetReplaceValue(replaceValue); if(fullConnectivity) connectedThreshold->SetConnectivity(ConnectedFilterType::FullConnectivity); connectedThreshold->Update(); return connectedThreshold->GetOutput(); }
vtkImageData* ROISegmentation::startConnectedThresholding(){ typedef itk::CastImageFilter< ImageType, ImageType > CastingFilterType; CastingFilterType::Pointer caster = CastingFilterType::New(); typedef itk::CurvatureFlowImageFilter< ImageType, ImageType > CurvatureFlowImageFilterType; CurvatureFlowImageFilterType::Pointer smoothing = CurvatureFlowImageFilterType::New(); typedef itk::ConnectedThresholdImageFilter< ImageType, ImageType > ConnectedFilterType; ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New(); if (!_index.empty()){ smoothing->SetInput(pDCM->getITKRawImage()); connectedThreshold->SetInput(smoothing->GetOutput()); caster->SetInput(connectedThreshold->GetOutput()); smoothing->SetNumberOfIterations(3); smoothing->SetTimeStep(0.125); connectedThreshold->SetLower(0); connectedThreshold->SetUpper(255); connectedThreshold->SetReplaceValue(255); ImageType::PointType seedPoint; ImageType::IndexType seedIndex; std::vector<CursorDim>::iterator iter = _index.begin(); for (iter; iter != _index.end(); ++iter){ seedPoint[0] = iter->_x; seedPoint[1] = iter->_y; seedPoint[2] = iter->_z; if (pDCM->getITKRawImage()->TransformPhysicalPointToIndex(seedPoint, seedIndex)){ qDebug() << "SeedIndex: " << seedIndex[0] << " " << seedIndex[1] << " " << seedIndex[2] << endl; connectedThreshold->AddSeed(seedIndex); } } caster->Update(); typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType; ConnectorType::Pointer connector = ConnectorType::New(); connector->SetInput(caster->GetOutput()); connector->Update(); vtkImageData * rawImage = vtkImageData::New(); rawImage->DeepCopy(connector->GetOutput()); return rawImage; } else{ return NULL; } }
int exampleProcessImageFilter::update() { typedef unsigned short PixelType; const unsigned int Dimension = 3; typedef itk::Image< PixelType, Dimension > ImageType; qDebug() << d->inputA->identifier(); if (d->option == optionA) { if (d->inputA->identifier()=="itkDataImageUShort3" && d->inputB->identifier()=="itkDataImageUShort3") { typedef itk::MaskImageFilter< ImageType,ImageType,ImageType > MaskFilterType; MaskFilterType::Pointer maskFilter = MaskFilterType::New(); //convert from dtkImages to ItkImages and set as intputs for the itk::MaskImageFilter maskFilter->SetInput1(dynamic_cast<ImageType*>((itk::Object*)(d->inputA->output()))); maskFilter->SetInput2(dynamic_cast<ImageType*>((itk::Object*)(d->inputB->output()))); //Create an image where the output of the filter is going to be displayed d->output =dynamic_cast<medAbstractDataImage *>(dtkAbstractDataFactory::instance()->create ("itkDataImageUShort3")); maskFilter->Update(); //Set the data for the output d->output->setData(maskFilter->GetOutput()); } else if(d->inputA->identifier()=="itkDataImageDouble4" && d->inputB->identifier()=="itkDataImageDouble4") { typedef double PixelType4; const unsigned int Dimension4 = 4; typedef itk::Image< PixelType4, Dimension4 > ImageType4; typedef itk::MaskImageFilter< ImageType4,ImageType4,ImageType4 > MaskFilterType4; MaskFilterType4::Pointer maskFilter4 = MaskFilterType4::New(); //convert from dtkImages to ItkImages and set as intputs for the itk::MaskImageFilter maskFilter4->SetInput1(dynamic_cast<ImageType4*>((itk::Object*)(d->inputA->output()))); maskFilter4->SetInput2(dynamic_cast<ImageType4*>((itk::Object*)(d->inputB->output()))); maskFilter4->Update(); //Create an image where the output of the filter is going to be displayed d->output =dynamic_cast<medAbstractDataImage *> (dtkAbstractDataFactory::instance()->create ("itkDataImageDouble4")); //Set the data for the output d->output->setData(maskFilter4->GetOutput()); typedef itk::ImageFileWriter< ImageType4 > WriterType; WriterType::Pointer writer = WriterType::New(); writer->SetFileName("/user/jgarciag/home/AnalyzeStuff/headerModify/ResulHalfMask4D.mha"); writer->SetInput(/*dynamic_cast<ImageType4*>((itk::Object*)(d->output->output()))*/maskFilter4->GetOutput()); writer->Update(); } else qDebug("Not the right itkDataImageUShort3 type of images"); } else if (d->option == optionB) { if (d->inputA->identifier()=="itkDataImageUShort3" && d->inputB->identifier()=="itkDataImageUShort3") { typedef itk::AddImageFilter< ImageType,ImageType,ImageType > AddFilterType; AddFilterType::Pointer AddFilter = AddFilterType::New(); AddFilter->SetInput1(dynamic_cast<ImageType*>((itk::Object*)(d->inputA->output()))); AddFilter->SetInput2(dynamic_cast<ImageType*>((itk::Object*)(d->inputB->output()))); d->output =dynamic_cast<medAbstractDataImage *> (dtkAbstractDataFactory::instance()->create ("itkDataImageUShort3")); AddFilter->Update(); d->output->setData(AddFilter->GetOutput()); } else qDebug("Not the right itkDataImageUShort3 type of images"); } else if (d->option == optionC) { if (d->inputA->identifier()=="itkDataImageUShort3" && d->inputB->identifier()=="itkDataImageUShort3") { typedef itk::ConnectedThresholdImageFilter< ImageType, ImageType > ConnectedFilterType; ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New(); connectedThreshold->SetInput( dynamic_cast<ImageType*>((itk::Object*)(d->inputA->output())) ); connectedThreshold->SetLower((d->lowerThreshold)); connectedThreshold->SetUpper((d->lowerThreshold)+150); ImageType::IndexType index; index[0] = d->x; index[1] = d->y; index[2] = d->z; connectedThreshold->SetSeed( index ); connectedThreshold->Update(); d->output =dynamic_cast<medAbstractDataImage *> (dtkAbstractDataFactory::instance()->create ("itkDataImageUShort3")); d->output->setData(connectedThreshold->GetOutput()); } else qDebug("Not the right itkDataImageUShort3 type of image"); } // emit progressed (100); qDebug("Adios"); return 0; }