[vtkusers] Segmentation and visualization with color

Dženan Zukić dzenanz at gmail.com
Mon Jul 16 12:45:02 EDT 2018


Hi Ashef,

have you looked at this example
<https://itk.org/ITKExamples/src/Filtering/ImageFusion/OverlayLabelMapOnTopOfAnImage/Documentation.html>?
If not, try it. Otherwise re-post this question on the forum
<https://discourse.itk.org/>. There was already a similar question
<https://discourse.itk.org/t/overlay-several-labels-on-top-of-an-image/1096>
.

Regards,
Dženan

On Thu, Jul 12, 2018 at 10:53 AM Ashef Shahrior <ashahrior.91994 at gmail.com>
wrote:

> I have followed the itk guide and implemented those segmentation methods.
> Using fast marching segmentation, I am getting this in the fourth box. I
> have used itk for segmentation and vtk for visualization with C++.
> [image: image.png]
> But what I actually want is something like this -
> [image: image.png]
> I want to show the segmented portion right on top of the main image but
> with a different color to distinguish it. How can I do that?
>
> This is my code:-
>
> https://paste.ubuntu.com/p/BRMrhys5J8/
>
> #include "iostream"#include "string.h"using namespace std;
> #include "itkCurvatureAnisotropicDiffusionImageFilter.h"
> #include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"#include "itkSigmoidImageFilter.h"
> #include "itkFastMarchingImageFilter.h"
> #include "itkBinaryThresholdImageFilter.h"
> #include "itkImageFileReader.h"#include "itkImageFileWriter.h"
> #include "itkRescaleIntensityImageFilter.h"#include "QuickView.h"
> #include "itkCastImageFilter.h"
> #include "itkGDCMImageIO.h"
> char inputFile[1000], iseedX[100], iseedY[100], isigma[100], isigmoidAlpha[100], isigmoidBeta[100], itimeThreshold[100], istoppingValue[100], inputType[100];char inputName[1000], outputImage[1000], smoothingOutputImage[1000], gradientMagnitudeOutputImage[1000], sigmoidOutputImage[1000];
> void takeInput(){
>     cout<< " Enter file path: ";
>     cin>>inputFile;
>     cout<< " Enter seed in X position: ";
> 	cin>>iseedX;
>     cout<< " Enter seed in Y position: ";
>     cin>>iseedY;
>     cout<< " Enter Sigma value: ";
>     cin>>isigma;
>     cout<< " Enter SigmoidAlpha value: ";
>     cin>>isigmoidAlpha;
>     cout<< " Enter SigmoidBeta value: ";
>     cin>>isigmoidBeta;
>     cout<< " Enter time-threshold value: ";
>     cin>>itimeThreshold;
>     cout<< " Enter stopping value: ";
>     cin>>istoppingValue;
>     cout<< " Enter input file type '-IMAGE'/'-DICOM' : ";
>     cin>>inputType;}
> void getFileName(){
>     int l = strlen(inputFile);
>     int x = 0;
>     for(int i = l-1; i>-1; i--)
>     {
>         if(inputFile[i]=='\\')
>             break;
>         inputName[x] = inputFile[i];
>         x++;
>     }
>     strrev(inputName);
>     return;}
>
> void fastMarchingSegmentation(){
>     try
>     {
>         takeInput();
>         getFileName();
>     }
>     catch(exception e)
>     {
>         cout<<"Exception occurred in taking input"<<endl;
>     }
>
>     typedef   float           InternalPixelType;
>     const     unsigned int    Dimension = 2;
>     typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
>
>     typedef unsigned char                            OutputPixelType;
>     typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>
>     typedef itk::BinaryThresholdImageFilter< InternalImageType, OutputImageType    >    ThresholdingFilterType;
>     ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
>
>     typedef itk::CastImageFilter< InternalImageType, OutputImageType > CastingFilterType;
>     CastingFilterType::Pointer caster = CastingFilterType::New();
>
>     const InternalPixelType  timeThreshold = atof( itimeThreshold );
>
>     thresholder->SetLowerThreshold(  0.0  );
>     thresholder->SetUpperThreshold( timeThreshold  );
>
>     thresholder->SetOutsideValue(  0  );
>     thresholder->SetInsideValue(  255 );
>
> 	typedef itk::GDCMImageIO           ImageIOType;
> 	ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
>
>     typedef  itk::ImageFileReader< InternalImageType > ReaderType;
>     typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
>
>     ReaderType::Pointer reader = ReaderType::New();
>     WriterType::Pointer writer = WriterType::New();
>
>     reader->SetFileName( inputFile );
> 	//outputImage = "Fast Marching Segmented ";// +inputFile;
> 	strcpy(outputImage, "Fast_Marching_Segmented_");
> 	strcat(outputImage, inputName);
>     writer->SetFileName( outputImage );
>
>
> 	for (int i = 0; inputType[i] != '\0'; i++)
> 		inputType[i] = toupper(inputType[i]);
>
> 	if (strcmp(inputType,"-DICOM")==0)
> 	{
> 		reader->SetImageIO(gdcmImageIO);
> 	}
> 	try
> 	{
> 		reader->Update();
> 	}
> 	catch (itk::ExceptionObject & e)
> 	{
> 		std::cerr << "exception in file reader " << std::endl;
> 		std::cerr << e << std::endl;
> 		return; // EXIT_FAILURE;
> 	}
>
>     typedef itk::RescaleIntensityImageFilter<InternalImageType, OutputImageType >   CastFilterType;
>
>     typedef   itk::CurvatureAnisotropicDiffusionImageFilter<
>     InternalImageType,
>     InternalImageType >  SmoothingFilterType;
>
>     SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
>
>     typedef   itk::GradientMagnitudeRecursiveGaussianImageFilter<InternalImageType, InternalImageType >  GradientFilterType;
>
>     typedef   itk::SigmoidImageFilter<InternalImageType, InternalImageType >  SigmoidFilterType;
>
>     GradientFilterType::Pointer  gradientMagnitude = GradientFilterType::New();
>     SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
>
>     sigmoid->SetOutputMinimum(  0.0  );
>     sigmoid->SetOutputMaximum(  1.0  );
>
>     typedef  itk::FastMarchingImageFilter< InternalImageType,InternalImageType >    FastMarchingFilterType;
>
>     FastMarchingFilterType::Pointer  fastMarching = FastMarchingFilterType::New();
>
>     smoothing->SetInput( reader->GetOutput() );
>     gradientMagnitude->SetInput( smoothing->GetOutput() );
>     sigmoid->SetInput( gradientMagnitude->GetOutput() );
>     fastMarching->SetInput( sigmoid->GetOutput() );
>     thresholder->SetInput( fastMarching->GetOutput() );
>     //caster->SetInput( thresholder->GetOutput() );
>     writer->SetInput(thresholder->GetOutput());
>
>     smoothing->SetTimeStep( 0.125 );
>     smoothing->SetNumberOfIterations(  5 );
>     smoothing->SetConductanceParameter( 9.0 );
>
>     const double sigma = atof( isigma );
>
>     gradientMagnitude->SetSigma(  sigma  );
>
>     const double alpha =  atof( isigmoidAlpha );
>     const double beta  =  atof( isigmoidBeta );
>
>     sigmoid->SetAlpha( alpha );
>     sigmoid->SetBeta(  beta  );
>
>     typedef FastMarchingFilterType::NodeContainer           NodeContainer;
>     typedef FastMarchingFilterType::NodeType                NodeType;
>     NodeContainer::Pointer seeds = NodeContainer::New();
>
>     InternalImageType::IndexType  seedPosition;
>
>     seedPosition[0] = atoi( iseedX );
>     seedPosition[1] = atoi( iseedY );
>
>     NodeType node;
>     const double seedValue = 0.0;
>
>     node.SetValue( seedValue );
>     node.SetIndex( seedPosition );
>
>     seeds->Initialize();
>     seeds->InsertElement( 0, node );
>
>     fastMarching->SetTrialPoints(  seeds  );
>
>
>     typedef itk::Image<unsigned char, 2>  ImageType;
>     ImageType::Pointer image;
> 	QuickView viewer;
>
>     try
>     {
> 		typedef itk::RescaleIntensityImageFilter< ImageType, ImageType > RescaleFilterType;
> 		RescaleFilterType::Pointer caster1 = RescaleFilterType::New();
>         WriterType::Pointer writer1 = WriterType::New();
>         caster->SetInput( smoothing->GetOutput() );
>
>         image = caster->GetOutput();
>
>         caster1->SetInput( image );
>         writer1->SetInput( caster1->GetOutput() );
>         //writer1->SetFileName("Smoothing Output Image "+inputFile);
>         char t1[100];
> 		strcpy(t1,"Smoothing_Output_Image_" );
> 		char tmp[1000];
> 		strcpy(tmp,inputName);
> 		strcat(t1, tmp);
> 		writer1->SetFileName(t1);
>         caster1->SetOutputMinimum(   0 );
>         caster1->SetOutputMaximum( 255 );
>         caster1->Update();
>         writer1->Update();
>         //QuickView viewer;
>         //viewer.AddImage(image.GetPointer());
>         viewer.AddImage(caster1->GetOutput());
>
>     }
>     catch( itk::ExceptionObject & err )
>     {
>         std::cerr << "ExceptionObject caught in the kahini one !" << std::endl;
>         std::cerr << err << std::endl;
> 		return; // EXIT_FAILURE;
>     }
>
>     try
>     {
>         CastFilterType::Pointer caster2 = CastFilterType::New();
>         WriterType::Pointer writer2 = WriterType::New();
>         caster2->SetInput( gradientMagnitude->GetOutput() );
>         writer2->SetInput( caster2->GetOutput() );
>         //writer2->SetFileName("Gradient Magnitude Output Image "+inputFile);
>         char t1[100];
>         strcpy(t1,"Gradient_Magnitude_Output_Image_");
> 		char tmp[1000];
> 		strcpy(tmp, inputName);
> 		strcat(t1, tmp);
> 		writer2->SetFileName(t1);
>         caster2->SetOutputMinimum(   0 );
>         caster2->SetOutputMaximum( 255 );
>         writer2->Update();
>
> 		image = caster2->GetOutput();
>
> 		/*		QuickView viewer;		viewer.AddImage(image.GetPointer());*/
> 		viewer.AddImage(caster2->GetOutput());
>     }
>     catch( itk::ExceptionObject & err )
>     {
>         std::cerr << "ExceptionObject caught !" << std::endl;
>         std::cerr << err << std::endl;
> 		return; //EXIT_FAILURE;
>     }
>
>     try
>     {
>         CastFilterType::Pointer caster3 = CastFilterType::New();
>         WriterType::Pointer writer3 = WriterType::New();
>         caster3->SetInput( sigmoid->GetOutput() );
>         writer3->SetInput( caster3->GetOutput() );
>         //writer3->SetFileName("Sigmoid Output Image"+inputFile);
>
>         char t1[100];
> 		strcpy(t1,"Sigmoid_Output_Image_");
> 		char tmp[1000];
> 		strcpy(tmp,inputName);
> 		strcat(t1, tmp);
> 		writer3->SetFileName(t1);
>         caster3->SetOutputMinimum(   0 );
>         caster3->SetOutputMaximum( 255 );
>         writer3->Update();
>
> 		//image = caster3->GetOutput();
> 		//QuickView viewer;
> 		//viewer.AddImage(image.GetPointer());
> 		viewer.AddImage(caster3->GetOutput());
> 		//viewer.Visualize();
>     }
>     catch( itk::ExceptionObject & err )
>     {
>         std::cerr << "ExceptionObject caught !" << std::endl;
>         std::cerr << err << std::endl;
> 		return; //EXIT_FAILURE;
>     }
>
>     fastMarching->SetOutputSize( reader->GetOutput()->GetBufferedRegion().GetSize() );
>
>     const double stoppingTime = atof( istoppingValue );
>
>     fastMarching->SetStoppingValue(  stoppingTime  );
>
>     try
>     {
>         writer->Update();
>     }
>     catch( itk::ExceptionObject & excep )
>     {
>         std::cerr << "Exception caught !" << std::endl;
>         std::cerr << excep << std::endl;
> 		return; //EXIT_FAILURE;
>     }
>
>     try
>     {
>         CastFilterType::Pointer caster4 = CastFilterType::New();
>         WriterType::Pointer writer4 = WriterType::New();
>         caster4->SetInput( fastMarching->GetOutput() );
>         writer4->SetInput( caster4->GetOutput() );
>         //writer4->SetFileName("Fast Marching Filter Output " + inputFile);
>         char t1[100];
> 		strcpy(t1,"Fast_Marching_Filter_Output_");
> 		char tmp[1000];
> 		strcpy(tmp,inputName);
> 		strcat(t1, tmp);
> 		writer4->SetFileName(t1);
>         caster4->SetOutputMinimum(   0 );
>         caster4->SetOutputMaximum( 255 );
>         writer4->Update();
>
> 		viewer.AddImage(caster4->GetOutput());
>
>     }
>     catch( itk::ExceptionObject & err )
>     {
>         std::cerr << "ExceptionObject caught !" << std::endl;
>         std::cerr << err << std::endl;
> 		return; //EXIT_FAILURE;
>     }
> 	viewer.ShareCameraOff();
> 	viewer.Visualize();}
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> https://public.kitware.com/mailman/listinfo/vtkusers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180716/818ae2f3/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 291396 bytes
Desc: not available
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180716/818ae2f3/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 84452 bytes
Desc: not available
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180716/818ae2f3/attachment-0003.png>


More information about the vtkusers mailing list