[Insight-users] 3D segmentation of LUNGS ( Region growing algorithm ) Need help

wassim_belhadj at topnet.tn wassim_belhadj at topnet.tn
Fri Feb 20 11:58:34 EST 2009


Hi Luis,

Thank you very much for your help.

I just followed the steps you gave me. It's a bit difficult for a beginner 
ITK user.


The segmentation was not conclusive (A black Volume result).


can you help me ?


Below my Input.mhd :

/***************************************************************************************************/
/***************************************************************************************************/

NDims = 3
DimSize = 512 512 494
ElementSpacing =0.777344 0.777344 0.7
Position = 0 0 0
ElementByteOrderMSB = False 
ElementType = MET_SHORT
HeaderSize = -1
ElementDataFile = prodhom.raw

/***************************************************************************************************/
/***************************************************************************************************/

This is the code that I used :

/***************************************************************************************************/
/***************************************************************************************************/

#include "itkConnectedThresholdImageFilter.h"
#include "itkImage.h"
#include "itkCastImageFilter.h"
#include "itkCurvatureFlowImageFilter.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkVTKImageExport.h"
#include "itkVTKImageImport.h"

int main( int argc, char *argv[])
{

  typedef   signed short         InternalPixelType;
  typedef	  signed short		   OutputPixelType;
  const     unsigned int		   Dimension = 3;
  typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
  typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
  typedef itk::CastImageFilter< InternalImageType, OutputImageType
>CastingFilterType;
  CastingFilterType::Pointer caster = CastingFilterType::New();            
       
  typedef  itk::ImageFileReader< InternalImageType > ReaderType;
  typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;

  ReaderType::Pointer reader = ReaderType::New();
  WriterType::Pointer writer = WriterType::New();

	reader->SetFileName( "c:/VTKEdge_Base_Test/images/Input.mhd" );
	writer->SetFileName( "c:/VTKEdge_Base_Test/images/Output.mhd" );

  typedef itk::CurvatureFlowImageFilter< InternalImageType,
InternalImageType > CurvatureFlowImageFilterType;

  CurvatureFlowImageFilterType::Pointer smoothing =
CurvatureFlowImageFilterType::New();

  typedef itk::ConnectedThresholdImageFilter< InternalImageType,
InternalImageType > ConnectedFilterType;

  ConnectedFilterType::Pointer connectedThreshold =
ConnectedFilterType::New();

  smoothing->SetInput( reader->GetOutput() );
  connectedThreshold->SetInput( smoothing->GetOutput() );
  connectedThreshold->SetInput( reader->GetOutput() );
  caster->SetInput( connectedThreshold->GetOutput() );
  writer->SetInput( caster->GetOutput() );

  smoothing->SetNumberOfIterations( 5 );
  smoothing->SetTimeStep( 0.125 );

  const InternalPixelType lowerThreshold =  -700  ;
  const InternalPixelType upperThreshold = 200 ;

  connectedThreshold->SetLower(  lowerThreshold  );
  connectedThreshold->SetUpper(  upperThreshold  );

  connectedThreshold->SetReplaceValue( 255 );

  InternalImageType::IndexType  index;
  index[0] = 180;
  index[1] =  296 ;

  connectedThreshold->SetSeed( index );
  
  InternalImageType::IndexType index2;
  index2[0] = 153;
  index2[1] = 274;


  connectedThreshold->SetSeed( index2 );

  try
    {
    writer->Update();
    }
  catch( itk::ExceptionObject & excep )
    {
    std::cerr << "Exception caught !" << std::endl;
    std::cerr << excep << std::endl;
    }

  return 0;
}
/***************************************************************************************************/
/***************************************************************************************************/
/***************************************************************************************************/

Best regards, Wassim


On Wed, 18 Feb 2009 10:20:55 -0500, Luis Ibanez <luis.ibanez at kitware.com>
wrote:
> Hi Wassim,
> 
> Please do the following:
> 
> 0) Extract a region of interest that includes the Trackea,
>     and the full Lungs, but not the head of the patient
>     (e.g. cut below the head, somewhere in the neck).
>     You can use the RegionOfInterestImageFilter for this.
>
http://www.itk.org/Insight/Doxygen/html/classitk_1_1RegionOfInterestImageFilter.html
> 
> 
> 1) Use the ConnectedThresholdImageFilter
>
http://www.itk.org/Insight/Doxygen/html/classitk_1_1ConnectedThresholdImageFilter.html
> 
> 2) Set seed points inside the Trackea
>     (one seed point should be enough
> 
> 3) Set the lower threshold to -700 Hounsfield Units
> 
> 4) Set the upper threshodl to -200 Hounsfield Units
> 
> 5) Run the filter
> 
> 
> This shoudld give you a binary mask of the two lungs.
> 
> If you find many holes inside the mask, you could
> clean it up with the Morphological filters or the
> Voting Hole filling filters.
> 
> 
>          Start typing....   :-)
> 
> 
> Once you are done, please keep in mind that we are
> happy to get "case studies" as papers to the Insight
> Journal. http://www.insight-journal.org/
> 
> These, more than "papers", are actually "technical
> reports". Yours could be entitled "Using ITK for
> Lung segmentation".
> 
> Please let us know if you need any help on writing
> this report.
> 
> 
> 
>      Regards,
> 
> 
>         Luis
> 
> 
> 
> ------------
> wassim_belhadj at topnet.tn wrote:
>> Hi, 
>> 
>> I'am using VTK and Qt4 for volume rendering.
>> 
>> I'm trying to define values of pixel that define LUNGS.
>> 
>> I assigned opacity to each pixel by checking its intensity value  with
>> Hounsfield Units values.
>> 
>> I  obtained a volume that contains the lungs and skin/air. 
>> 
>> 
>> I varied the opacity values to eliminate the skin that surrounds the
>> lungs
>> but I have not succeeded.
>> 
>> VTK users asked me to do a segmentation (region growing algorithm ) to
>> display ONLY the lungs. 
>> 
>> http://www.vtk.org/pipermail/vtkusers/2009-February/099524.html
>> 
>> Can you help me? 
>> 
>> How do I proceed (ITK-VTK)?
>> 
>> Have you an example of 3D segmentation (region growing algorithm)?
>> 
>> Regards, Wassim
>> _____________________________________
>> 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 ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>>


More information about the Insight-users mailing list