vtkImageData* ROISegmentation::startRegionGrow(){ typedef itk::CastImageFilter< ImageType, ImageType > CastingFilterType; CastingFilterType::Pointer caster = CastingFilterType::New(); typedef itk::CurvatureFlowImageFilter< ImageType, ImageType > CurvatureFlowImageFilterType; CurvatureFlowImageFilterType::Pointer smoothing = CurvatureFlowImageFilterType::New(); typedef itk::ConfidenceConnectedImageFilter<ImageType, ImageType> ConnectedFilterType; ConnectedFilterType::Pointer confidenceConnected = ConnectedFilterType::New(); smoothing->SetInput(pDCM->getITKRawImage()); confidenceConnected->SetInput(smoothing->GetOutput()); caster->SetInput(confidenceConnected->GetOutput()); //Parameter Settings smoothing->SetNumberOfIterations(2); smoothing->SetTimeStep(0.05); confidenceConnected->SetMultiplier(2.5); confidenceConnected->SetNumberOfIterations(2); confidenceConnected->SetInitialNeighborhoodRadius(1); confidenceConnected->SetReplaceValue(255); if (!_index.empty()){ 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; confidenceConnected->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; } }
void ImageCurvatureFlowTransform::process() { foreach (const ElementBase *source, mSourceElementsReadySet) for (int i = 0; i < source->getFramesNo(); ++i) { const FrameBase *frame = source->getFrame(i); if (mSrcFrame.isCopyable(*frame)) { mImageFrame.clear(); mImageFrame.setSourceName(frame->getSourceName()); mSrcFrame.resizeAndCopyFrame(*frame); FloatImageFrame::ImageType::Pointer srcImg = mSrcFrame; typedef FloatImageFrame::PixelType InternalPixelType; const unsigned int Dimension = 2; typedef Image<InternalPixelType, Dimension> InternalImageType; // typedef GrayImageFrame::PixelType OutputPixelType; // typedef Image<OutputPixelType, Dimension> OutputImageType; typedef CurvatureFlowImageFilter<InternalImageType, InternalImageType> CurvatureFlowImageFilterType; CurvatureFlowImageFilterType::Pointer curvatureflow = CurvatureFlowImageFilterType::New(); curvatureflow->SetNumberOfIterations(property("iterations").toInt()); curvatureflow->SetTimeStep(property("timeStep").toDouble()); curvatureflow->SetInput(srcImg); curvatureflow->Update(); mImageFrame.resizeAndCopyImage(curvatureflow->GetOutput()); emit framesReady(); break; } } }