[Insight-users] RelabelComponentImageFilter nothing at rendered window..,

Luis Ibanez luis.ibanez@kitware.com
Sun May 16 16:58:28 EDT 2004


Hi Yasser,

Something doesn't match in your description.

If you used the RelabelImage filter, all
the resulting regions *must* have different
gray levels. The tumor and the head shouldn't
have the same gray level *unless* they are
really connected and form a single region.

Loading your data in any decent viewer that
allow you to click and read pixel values will
solve the mistery.

I would guess that the gray levels simply
happen to be so similar that to your eye
they look like the same grayvalue....


For a nice method of converting labels
into colors, please look at the Watershed
example in

   Insight/Examples/Segmentation/
             WatershedSegmentation1.cxx


where the UnaryFunctorFilter
http://www.itk.org/Insight/Doxygen/html/classitk_1_1UnaryFunctorImageFilter.html

is templated over the ScalarToRGBPixelFunctor
http://www.itk.org/Insight/Doxygen/html/classitk_1_1Functor_1_1ScalarToRGBPixelFunctor.html




  Regards,


     Luis



-------------------
yasser salman wrote:

> hi luis ,
> thanks Luis it works!i rescale the vlaues and it
> works,  but when i trying to display the segmented
> region (tumor) and the whole object ( head) both have
> the same gray level :( so i try to use 
> vtkImageMapToColors , vtkImageBlend , to blend two
> objects, As i know the output image of the
> vtkImageMapToColor is VTK_UNSIGNED_CHAR so should i 
> convert it to VTK_UNSIGNED_Short to be displayed?
> (how?), also if there are any other method to Map the
> segmented region into color region in ITK plz help
> me.., thanks luis,, 
> regard's
> yasser..,  
> --- Luis Ibanez <luis.ibanez@kitware.com> wrote:
> 
>>Hi Yasser,
>>
>>The Relabel image filter assigns values like :
>>1,2,3....
>>
>>to the pixels in the image.  Those values will
>>appear very dark in any viewer unless you rescale
>>them before attempting to visualize them.
>>
>>
> 
> http://www.itk.org/Insight/Doxygen/html/classitk_1_1RelabelComponentImageFilter.html
> 
>>
>>Since you are using VTK for visualization, you
>>simply
>>need to adjust the parameters of intensity windowing
>>in your viewer.
>>
>>
>>
>>   Regards,
>>
>>
>>     Luis
>>
>>
>>----------------------
>>yasser salman wrote:
>>
>>>Hi All..,
>>>
>>>when i'm using  itkRelabelComponentImageFilter as
>>
>>the
>>
>>>input to the writer the file saved and i can
>>
>>display
>>
>>>it clearly also GetSizeOfObjectsInPixels() works
>>
>>good,
>>
>>>but when i'm using it as the input of of
>>>itk2vtkconnector nothing displayed in the render
>>>window can u find out why?
>>>
>>>
> 
> 
>  typedef unsigned short   InputPixelType;
>   typedef float        InternalPixelType;
>   
>   typedef unsigned short   SegmentedPixelType;
> 
>   typedef itk::Image< InputPixelType, 3 >        
> InputImageType;
>   typedef itk::Image< InternalPixelType, 3>      
> InternalImageType;
> 
>   typedef itk::Image< SegmentedPixelType, 3 >    
> SegmentedImageType;
> 
>   typedef   itk::CastImageFilter< 
>                  InputImageType, 
>                  InternalImageType >    
> CastImageFilterType;
> 
>   typedef   itk::CurvatureFlowImageFilter< 
>                  InternalImageType, 
>                  InternalImageType >    
> CurvatureFlowImageFilterType;
> 
>   typedef   itk::ConfidenceConnectedImageFilter< 
>                          InternalImageType, 
>                          SegmentedImageType >     
> 				 ConfidenceConnectedImageFilterType;
> 
>   typedef itk::ConnectedThresholdImageFilter< 
> 			InternalImageType, SegmentedImageType >
> ConnectedFilterType;
>   
> 
>   typedef itk::ImageToVTKImageFilter<
> SegmentedImageType >  
> 			ITK2VTKConnectorFilterType;
> 
>   typedef itk::VTKImageToImageFilter< InputImageType  
>   >  
>             VTK2ITKConnectorFilterType;
> 	   typedef itk::ImageSeriesReader< InputImageType >  
>   ReaderType;
>   typedef std::vector<std::string> seriesIdContainer;
>   typedef std::vector<std::string> fileNamesContainer;
>   typedef ConnectedFilterType::IndexType IndexType;	
>   typedef
> itk::ImageMomentsCalculator<SegmentedImageType>
> ImageMomentsType;
> typedef itk::ImageSeriesReader< InputImageType >    
> ReaderType;
> 
>   itk::DICOMImageIO2::Pointer dicomIO =
> itk::DICOMImageIO2::New();
> 
>   // Get the DICOM filenames from the directory
>   itk::DICOMSeriesFileNames::Pointer nameGenerator =
> itk::DICOMSeriesFileNames::New();
>  CString  directoryname(VolData_FName);
> 
>   std::string    stringdirectory =
> directoryname.GetBuffer(200);
> 
>  // nameGenerator->SetDirectory(  stringdirectory );
> it works!!!!!
> 
>   nameGenerator->SetDirectory(
> "d:/imagedata/Dicom/shy4" );
> 
>   typedef std::vector<std::string> seriesIdContainer;
>   const seriesIdContainer & seriesUID =
> nameGenerator->GetSeriesUIDs();
> seriesIdContainer::const_iterator seriesItr =
> seriesUID.begin();
>   seriesIdContainer::const_iterator seriesEnd =
> seriesUID.end();
>   while( seriesItr != seriesEnd )
>     {
>     std::cout << seriesItr->c_str() << std::endl;
>     seriesItr++;
>     }
>   
>    typedef std::vector<std::string>
> fileNamesContainer;
>   fileNamesContainer fileNames;
>    fileNames = nameGenerator->GetFileNames();
>   
>   
>   ReaderType::Pointer reader = ReaderType::New();
>   reader->SetFileNames( fileNames );
>   reader->SetImageIO( dicomIO );
> 
>     reader->Update();
>   
> 
>   CastImageFilterType::Pointer cast =
> CastImageFilterType::New();
> 
>   CurvatureFlowImageFilterType::Pointer smoothing = 
> CurvatureFlowImageFilterType::New();
> 
>   ConfidenceConnectedImageFilterType::Pointer
> confidence = 
> ConfidenceConnectedImageFilterType::New();
> 
>   ConnectedFilterType::Pointer connectedThreshold = 
> ConnectedFilterType::New();
>   RelabelImageFilter::Pointer rcfilter=
> RelabelImageFilter::New();
>   VTK2ITKConnectorFilterType::Pointer VTK2ITKconnector
> = 
> VTK2ITKConnectorFilterType::New();
>   RescaleType:: Pointer rescale= RescaleType::New();
> 
>   
> 
>   cast->SetInput( reader->GetOutput() );
> 
>   smoothing->SetInput(  cast->GetOutput() );
>   confidence->SetInput( smoothing->GetOutput());
> 
>   smoothing->SetTimeStep( 0.0625 );
>  smoothing->SetNumberOfIterations( 2 );
> 
>     connectedThreshold->SetInput(
> smoothing->GetOutput() );
>   
>   connectedThreshold->SetLower(  L_threshold  );
>   connectedThreshold->SetUpper(  H_threshold);
>   connectedThreshold->SetReplaceValue(
> SegmentedRegionColor );
> 
> 
>   typedef ConnectedFilterType::IndexType IndexType;
>   IndexType seed;
>   seed[0] = axi;
>   seed[1] = cron;
>   seed[2] = sag;
> 
>   connectedThreshold->SetSeed( seed );
>   ImageMomentsType::Pointer
> calculator=ImageMomentsType::New();
> connectedThreshold->Update();
>   calculator->SetImage(
> connectedThreshold->GetOutput());
>  calculator->Compute();
> 
> 
> area = calculator->GetTotalMass()/255;
> char b[10];
> sprintf(b,"%f",area);
> AfxMessageBox(b);
>   
> SegmentedImageType::ConstPointer image  =
> connectedThreshold->GetOutput();
> SegmentedImageType::RegionType   region =
> connectedThreshold->GetBufferedRegion();
> SegmentedImageType::SizeType     size   =
> region.GetSize();
> 
> 
> 
> 
>   ITK2VTKConnectorFilterType::Pointer ITK2VTKconnector
> = 
> ITK2VTKConnectorFilterType::New();
> rcfilter->SetInput(connectedThreshold->GetOutput());
> rcfilter->Update();
> 	unsigned long nObjects =
> rcfilter->GetNumberOfObjects();
> 	const std::vector<unsigned long> sizeOfObjects =
> rcfilter->GetSizeOfObjectsInPixels();
> 	std::vector<unsigned long>::const_iterator it;
> 
> 	int i;
> 	 it =  sizeOfObjects.begin();  
> 		
> 	
> rescale->SetInput(rcfilter->GetOutput());
> rescale->SetOutputMinimum(0);
> rescale->SetOutputMaximum(255);
> rescale->Update();
> typedef itk::ImageFileWriter<SegmentedImageType>		
> itkWriterType;
> 	typedef itk::DICOMImageIO2									
> itkMetaImageIOType;
> 	itkMetaImageIOType::Pointer		labellerMetaWriterIO  =
> itkMetaImageIOType::New();
> 	 itkWriterType::Pointer				relabellerWriter				=
> itkWriterType::New();
> 	itkMetaImageIOType::Pointer		relabellerMetaWriterIO 
> = itkMetaImageIOType::New();
> 	relabellerWriter->SetInput( rcfilter->GetOutput() );
> 	relabellerWriter->SetFileName(
> "c:/Shapes_relabelled.vtk" );
> 	relabellerWriter->SetImageIO( relabellerMetaWriterIO
> );
> 	relabellerWriter->Write();
> rcfilter->Update();
> 
>   ITK2VTKconnector->SetInput(rescale->GetOutput());
>  
> ITK2VTKconnector->GetImporter()->SetDataScalarTypeToUnsignedChar();
>   
>   //----------------------------------
>   //           VTK Pipeline
>   //----------------------------------
> 
>  
>  GaussianRegion->SetStandardDeviations (5, 2, 1);
>      GaussianRegion-> SetRadiusFactors (1.0, 1.0,
> 1.0);
> GaussianRegion
> ->SetInput(ITK2VTKconnector->GetOutput());
>   
> vtkLookupTable *hueLut0 = vtkLookupTable::New();
>     hueLut0->SetTableRange (0,2000);
>     hueLut0->SetAlphaRange(0,1);
>     hueLut0->SetSaturationRange (0,0);
>     hueLut0->SetValueRange (0, 5);
>     
> 	hueLut0->Build();
> 	
> 	hueLut0->SetHueRange (0, 0);
> 	
> 	vtkLookupTable *hueLut1 = vtkLookupTable::New();
> 	hueLut1->SetTableRange (0,2000);
>     hueLut1->SetAlphaRange(0,1);
>     hueLut1->SetSaturationRange (1,1);
>     hueLut1->SetValueRange (1, 1);
> 	
> 	hueLut1->Build();
> 	
> 	hueLut1->SetHueRange (0, 1);
> 
>   vtkImageMapToColors *alpha0 =
> vtkImageMapToColors::New();
>     alpha0->SetInput(gaussian->GetOutput());
>     alpha0->SetLookupTable(hueLut0);
>   vtkImageMapToColors *alpha1 =
> vtkImageMapToColors::New();
>     alpha1->SetInput(GaussianRegion->GetOutput());
>    alpha1->SetLookupTable(hueLut1);
> 
>   vtkImageBlend *blend=vtkImageBlend::New();
>     blend-> SetInput(0,alpha0->GetOutput());
>     blend-> SetInput(1,alpha1->GetOutput());// end of
> 1
>    blend->SetOpacity(1,.7);
> 
> 
> 
> mcTumor->SetInput(GaussianRegion->GetOutput());  // to
> display Tumor only it works!!
> 	mc->SetInput( blend->GetOutput());  // to display
> Both tumor and head but nosiy displayed.., 
> 	
> 	
> .... to visualiztion pipes..,
> 
> 
> 
> 	
> 		
> __________________________________
> Do you Yahoo!?
> SBC Yahoo! - Internet access at a great low price.
> http://promo.yahoo.com/sbc/
> _______________________________________________
> Insight-users mailing list
> Insight-users@itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 






More information about the Insight-users mailing list