typename TInputImage::Pointer SegmentationIntensityAndTextureImages<TInputImage>::getIntensityImage() { typedef itk::HistogramEqualizationFilter<ImageType,ImageType> EqualizationFilterType; typename EqualizationFilterType::Pointer equalizationFilter = EqualizationFilterType::New(); equalizationFilter->SetInput(inputImage); equalizationFilter->Update(); typedef itk::GradientAnisotropicDiffusionImageFilter<ImageType,ImageType> AnisotropicFilterType; typename AnisotropicFilterType::Pointer anisotropicFilter = AnisotropicFilterType::New(); anisotropicFilter->SetInput(equalizationFilter->GetOutput()); anisotropicFilter->SetNumberOfIterations(25); anisotropicFilter->SetTimeStep(timeStep); anisotropicFilter->SetConductanceParameter(3); anisotropicFilter->Update(); typename RescaleFilterType::Pointer normalizeFilter = RescaleFilterType::New(); normalizeFilter->SetOutputMaximum(255); normalizeFilter->SetOutputMinimum(0); normalizeFilter->SetInput(anisotropicFilter->GetOutput()); normalizeFilter->Update(); return normalizeFilter->GetOutput(); }
void SegmentationIntensityAndTextureImages<TInputImage>::setInput(ImageType* image) { typename RescaleFilterType::Pointer normalizeFilter = RescaleFilterType::New(); normalizeFilter->SetOutputMaximum(255); normalizeFilter->SetOutputMinimum(0); normalizeFilter->SetInput(image); normalizeFilter->Update(); this->inputImage = normalizeFilter->GetOutput(); this->timeStep = 0.125; }
typename TInputImage::Pointer SegmentationIntensityAndTextureImages<TInputImage>::getTextureImage() { typedef itk::ScalarToTextureRLImageFilter<ImageType,ImageType> FilterType; typename FilterType::Pointer textureFilter = FilterType::New(); textureFilter->SetInput(inputImage); textureFilter->SetTextureFeature(8); typename FilterType::RegionSizeType size; size.Fill(13); textureFilter->SetRegionSize(size); textureFilter->Update(); typename RescaleFilterType::Pointer normalizeFilter = RescaleFilterType::New(); normalizeFilter->SetOutputMaximum(255); normalizeFilter->SetOutputMinimum(0); normalizeFilter->SetInput(textureFilter->GetOutput()); normalizeFilter->Update(); return normalizeFilter->GetOutput(); }
void operator()( const Parameter ¶m ) { OSLM_DEBUG( "itk::ImageSeriesWriter with PIXELTYPE "<< fwTools::DynamicType::string<PIXELTYPE>() ); ::fwData::Image::sptr image = param.m_dataImage; // VAG attention : ImageFileReader ne notifie AUCUNE progressEvent mais son ImageIO oui!!!! mais ImageFileReader ne permet pas de l'atteindre // car soit mis a la mano ou alors construit lors de l'Update donc trop tard // Il faut dont creer une ImageIO a la mano (*1*): affecter l'observation sur IO (*2*) et mettre le IO dans le reader (voir *3*) // Reader IO (*1*) typename itk::ImageIOBase::Pointer imageIOWrite = itk::ImageIOFactory::CreateImageIO( "image.jpg", itk::ImageIOFactory::WriteMode); assert( imageIOWrite.IsNotNull() ); // create writer typedef itk::Image< PIXELTYPE, 3> itkImageType; typedef itk::Image< unsigned char, 2 > Image2DType; typedef typename itk::ImageSeriesWriter< itkImageType, Image2DType > WriterType; typename WriterType::Pointer writer = WriterType::New(); // set observation (*2*) itk::LightProcessObject::Pointer castHelper= (itk::LightProcessObject *)(imageIOWrite.GetPointer()); assert( castHelper.IsNotNull() ); Progressor progress(castHelper, param.m_fwWriter, param.m_filename); // create itk Image typename itkImageType::Pointer itkImage = ::fwItkIO::itkImageFactory<itkImageType>( image ); typedef ::itk::IntensityWindowingImageFilter< itkImageType, itkImageType > RescaleFilterType; typename RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New(); double min, max; ::fwData::Composite::sptr poolTF; poolTF = image->getField< ::fwData::Composite>( ::fwComEd::Dictionary::m_transferFunctionCompositeId ); if(poolTF) { ::fwData::Composite::iterator iter = poolTF->find(::fwData::TransferFunction::s_DEFAULT_TF_NAME); if(iter != poolTF->end()) { ::fwData::TransferFunction::sptr tf; tf = ::fwData::TransferFunction::dynamicCast(iter->second); min = tf->getWLMinMax().first; max = tf->getWLMinMax().second; } } else { ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max); } rescaleFilter->SetWindowMinimum( min ); rescaleFilter->SetWindowMaximum( max ); rescaleFilter->SetOutputMinimum( 0 ); rescaleFilter->SetOutputMaximum( 255 ); rescaleFilter->InPlaceOff(); rescaleFilter->SetInput( itkImage ); rescaleFilter->Update(); writer->SetInput( rescaleFilter->GetOutput() ); typedef itk::NumericSeriesFileNames NameGeneratorType; NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New(); std::string format = param.m_filename; format += "/%04d.jpg"; nameGenerator->SetSeriesFormat( format.c_str() ); nameGenerator->SetStartIndex( 1 ); nameGenerator->SetEndIndex( image->getSize()[2] ); nameGenerator->SetIncrementIndex( 1 ); writer->SetFileNames( nameGenerator->GetFileNames() ); writer->SetImageIO( imageIOWrite ); // save image; writer->Update(); }