[Insight-users] FW: Connected Threshold Filter
Wu Zheying
u0303820 at nus.edu.sg
Thu Jan 18 03:39:34 EST 2007
Hi Luis,
i am attaching my code here for your reference. I am using unsigned char for the output pixel type. The seed coordinates should be ok because i tried them with fast marching and it worked. Pls let me know if anything is wrong with the code?
rgds,
Zach
code:
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#ifdef __BORLANDC__
#define ITK_LEAN_AND_MEAN
#endif
#include "itkConnectedThresholdImageFilter.h"
#include "itkImage.h"
#include "itkCastImageFilter.h"
#include "itkSubtractImageFilter.h" //added the image subtraction filter, but not used here
#include "itkCurvatureFlowImageFilter.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
int main( int argc, char *argv[])
{
if( argc < 8 )
{
std::cerr << "Missing Parameters " << std::endl;
std::cerr << "Usage: " << argv[0];
std::cerr << " inputImage outputImage seedX seedY lowerThreshold upperThreshold seedZ" << std::endl;
return 1;
}
typedef unsigned char InternalPixelType;
const unsigned int Dimension = 3;
typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
typedef unsigned char OutputPixelType;
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
typedef itk::CastImageFilter< InternalImageType, OutputImageType >
CastFilterType;
CastFilterType::Pointer caster = CastFilterType::New();
typedef itk::ImageFileReader< InternalImageType > ReaderType;
typedef itk::ImageFileWriter< OutputImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
reader->SetFileName( argv[1] );
writer->SetFileName( argv[2] );
typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType >
CurvatureFlowImageFilterType;
CurvatureFlowImageFilterType::Pointer smoothing =
CurvatureFlowImageFilterType::New();
typedef itk::ConnectedThresholdImageFilter< InternalImageType,
InternalImageType > ConnectedFilterType;
ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();
typedef itk::SubtractImageFilter<
InternalImageType,
InternalImageType,
InternalImageType > DifferenceFilterType;
DifferenceFilterType::Pointer difference = DifferenceFilterType::New();
smoothing->SetInput( reader->GetOutput() );
connectedThreshold->SetInput( smoothing->GetOutput() );
caster->SetInput (connectedThreshold->GetOutput());
writer->SetInput ( caster->GetOutput());
smoothing->SetNumberOfIterations( 1 );
smoothing->SetTimeStep( 0.0625 );
const InternalPixelType lowerThreshold = atof( argv[5] );
const InternalPixelType upperThreshold = atof( argv[6] );
connectedThreshold->SetLower( lowerThreshold );
connectedThreshold->SetUpper( upperThreshold );
connectedThreshold->SetReplaceValue( 255 );
InternalImageType::IndexType index;
index[0] = atoi( argv[3] );
index[1] = atoi( argv[4] );
index[2] = atoi( argv[7] );
connectedThreshold->SetSeed( index );
try
{
writer->Update();
}
catch( itk::ExceptionObject & excep )
{
std::cerr << "Exception caught !" << std::endl;
std::cerr << excep << std::endl;
}
return 0;
}
-----Original Message-----
From: Luis Ibanez [mailto:luis.ibanez at kitware.com]
Sent: Tue 1/16/2007 6:25 AM
To: Wu Zheying; Insight Users
Subject: Re: [Insight-users] FW: Connected Threshold Filter
Hi Zach,
From your limited description is very difficult
to identify what the problem is.
You may have to start eliminating suspects one at
a time.
1) Have you verified that the analyze files are
read correctly ? For example, pass the output
of the reader to a writer, save the image and
open it with a viewer to see if it is the same
as the original.
2) Have you verified that the seeds are located
in pixels with values that are inside the range
defined by the lower,upper thresholds ?
3) What pixel type did you used for instantiating
the output of the ConnectedThreshold image filter.
4) When you say that "My output is all black and
has been reduced from 16 bit to 8bit when i view
in MRIcro. " do you mean that MRIcro reduced
the pixel type of the image ? or do you mean
that you change the pixel type inside your code ?
It will help a lot if you post your source code to
the list.
Thanks
Luis
---------------------
Wu Zheying wrote:
> Hi all,
>
> I am doing the connected threshold filter example using analyze datasets and
> 3d input seeds. My output is all black and has been reduced from 16 bit to
> 8bit when i view in MRIcro. What is the reason for this? and what is the
> proper way to get past this problem?
>
> much thanks,
> Zach
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070118/fba9c783/attachment-0001.htm
More information about the Insight-users
mailing list