[Insight-users] ITK FastMarching example--help!!!--the resultion of output images are changed to [1 1 1]
Luis Ibanez
luis.ibanez at kitware.com
Wed Feb 25 12:11:30 EST 2009
Hi Baoyun,
Yes ITK 3.10 is the release where this bug sneaked in. :-(
You can fix it by yourself by applying the following change:
http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/BasicFilters/itkGradientMagnitudeRecursiveGaussianImageFilter.txx?root=Insight&r1=1.20&r2=1.21&sortby=date
Simply add:
cumulativeImage->CopyInformation(this->GetInput());
to line 216 of the file
Insight/Code/BasicFilters/
itkGradientMagnitudeRecursiveGaussianImageFilter.txx
and rebuild your application.
--
The great advantage of Open Source software is indeed
that you *can* help yourself and help others by fixing
things on your own. :-)
Please let us know if you find any problem,
Thanks
Luis
------------------------------------------------------------------------
On Wed, Feb 25, 2009 at 11:52 AM, Baoyun Li <baoyun_li123 at yahoo.com> wrote:
> Dear Luis:
>
> The ITK version I used 3.10.0. I begin to used it at the end of 2008. Do
> you think that will be a problem?
>
> I will try CVS version or the new relase, and let you know the result.
>
> Is it possible for myself to fix the problem? Or I have to be very familiar
> with ITK to solve the problem by myself. You know the later work can not be
> continues once this kind of thing happend.
>
> Thanks and my best regards
>
> Baoyun
>
>
>
> ------------------------------
> *From:* Luis Ibanez <luis.ibanez at kitware.com>
> *To:* Baoyun Li <baoyun_li123 at yahoo.com>
> *Cc:* insight-users at itk.org
> *Sent:* Wednesday, February 25, 2009 10:43:43 AM
> *Subject:* Re: ITK FastMarching example--help!!!--the resultion of output
> images are changed to [1 1 1]
>
>
> Hi Baoyun,
>
> What version of ITK are you using ?
>
> In a recent release a bug went into the RecursiveGaussianImageFilter,
> that resulted in the spacing information being reset to trivial values.
>
> This has now been fixed in the CVS repository.
>
> Could you please try a CVS checkout of ITK ?
>
> FYI: We will be releasing ITK 3.12 by Monday.
>
> Please let us know what you find,
>
>
> Thanks
>
>
> Luis
>
>
> -----------------------------------------
> On Wed, Feb 25, 2009 at 11:39 AM, Baoyun Li <baoyun_li123 at yahoo.com>wrote:
>
>> Dear All:
>>
>> When I run ITK example for fastmarching (see the attached code below), the
>> output image resolution are changed to [1 1 1] begining at sigmoid
>> filter output [writer3->SetFileName("../data/FastMarchingFilterOutput3.hdr")].
>> But my input resolution is [0.7 0.7 2.5]. The first two output files kept
>> the origianl resolution.
>>
>> I only changed some arguments of the expmale code and the Dimension to
>> 3. My command aruguments are: FastMarchingImageFilter SE1.hdr out.hdr 1000
>> 1001.
>>
>> ITK deals images on Physical space, now the spacial resolution of images
>> are changed, so I do not how I can trust the results and cannot continue
>> some works, eg mutiple resoltion processing
>>
>> Can somebody help me to figure out this problem? Thanks a lot.
>>
>>
>> Best regards
>>
>> Baoyun
>>
>>
>> #if defined(_MSC_VER)
>> #pragma warning ( disable : 4786 )
>> #endif
>> #ifdef __BORLANDC__
>> #define ITK_LEAN_AND_MEAN
>> #endif
>>
>>
>> #include "itkCurvatureAnisotropicDiffusionImageFilter.h"
>> #include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"
>> #include "itkSigmoidImageFilter.h"
>> #include "itkImage.h"
>> #include "itkFastMarchingImageFilter.h"
>>
>> // Software Guide : BeginCodeSnippet
>> #include "itkBinaryThresholdImageFilter.h"
>>
>> // Software Guide : BeginCodeSnippet
>> #include "itkImageFileReader.h"
>> #include "itkImageFileWriter.h"
>> //
>> #include "itkRescaleIntensityImageFilter.h"
>>
>> int main( int argc, char *argv[] )
>> {
>> if( argc < 3 )
>> {
>> std::cerr << "Missing Parameters " << std::endl;
>> std::cerr << "Usage: " << argv[0];
>> std::cerr << " inputImage outputImage seedX seedY";
>> std::cerr << " Sigma SigmoidAlpha SigmoidBeta TimeThreshold
>> StoppingValue" << std::endl;
>> return 1;
>> }
>>
>>
>> // Software Guide : BeginCodeSnippet
>> typedef float InternalPixelType;
>> const unsigned int Dimension = 3;
>> typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
>> // Software Guide : EndCodeSnippet
>> typedef unsigned char OutputPixelType;
>> typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>> // Software Guide : EndCodeSnippet
>> typedef itk::BinaryThresholdImageFilter< InternalImageType,
>> OutputImageType > ThresholdingFilterType;
>> ThresholdingFilterType::Pointer thresholder =
>> ThresholdingFilterType::New();
>>
>> const InternalPixelType timeThreshold = atof( argv[3] );
>>
>> // Software Guide : BeginCodeSnippet
>> thresholder->SetLowerThreshold( 0.0 );
>> thresholder->SetUpperThreshold( timeThreshold );
>> thresholder->SetOutsideValue( 0 );
>> thresholder->SetInsideValue( 255 );
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::ImageFileReader< InternalImageType > ReaderType;
>> typedef itk::ImageFileWriter< OutputImageType > WriterType;
>> // Software Guide : EndCodeSnippet
>>
>> ReaderType::Pointer reader = ReaderType::New();
>> WriterType::Pointer writer = WriterType::New();
>> reader->SetFileName( argv[1] );
>> writer->SetFileName( argv[2] );
>>
>> // The RescaleIntensityImageFilter type is declared below. This filter
>> will
>> // renormalize image before sending them to writers.
>> //
>> typedef itk::RescaleIntensityImageFilter<
>> InternalImageType,
>> OutputImageType > CastFilterType;
>> typedef itk::CurvatureAnisotropicDiffusionImageFilter<
>> InternalImageType,
>> InternalImageType > SmoothingFilterType;
>>
>> // Software Guide : BeginCodeSnippet
>> SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
>> InternalImageType,
>> InternalImageType > GradientFilterType;
>> typedef itk::SigmoidImageFilter<
>> InternalImageType,
>> InternalImageType > SigmoidFilterType;
>>
>> GradientFilterType::Pointer gradientMagnitude =
>> GradientFilterType::New();
>> SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
>> // Software Guide : EndCodeSnippet
>>
>> // Software Guide : BeginCodeSnippet
>> sigmoid->SetOutputMinimum( 0.0 );
>> sigmoid->SetOutputMaximum( 1.0 );
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::FastMarchingImageFilter< InternalImageType,
>> InternalImageType >
>> FastMarchingFilterType;
>>
>> // Software Guide : BeginCodeSnippet
>> FastMarchingFilterType::Pointer fastMarching =
>> FastMarchingFilterType::New();
>>
>> // Software Guide : BeginCodeSnippet
>> smoothing->SetInput( reader->GetOutput() );
>> gradientMagnitude->SetInput( smoothing->GetOutput() );
>> sigmoid->SetInput( gradientMagnitude->GetOutput() );
>> fastMarching->SetInput( sigmoid->GetOutput() );
>> thresholder->SetInput( fastMarching->GetOutput() );
>> writer->SetInput( thresholder->GetOutput() );
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> smoothing->SetTimeStep( 0.05 );
>> smoothing->SetNumberOfIterations( 10 );
>> smoothing->SetConductanceParameter( 9.0 );
>> // Software Guide : EndCodeSnippet
>>
>>
>> const double sigma = (float) 2.5;//atof( argv[5] );
>> // Software Guide : BeginCodeSnippet
>> gradientMagnitude->SetSigma( sigma );
>> // Software Guide : EndCodeSnippet
>>
>> const double alpha = (float)-0.33;//atof( argv[6] );
>> const double beta = (float) 0.5;//atof( argv[7] );
>>
>> // Software Guide : BeginCodeSnippet
>> sigmoid->SetAlpha( alpha );
>> sigmoid->SetBeta( beta );
>>
>>
>> typedef FastMarchingFilterType::NodeContainer NodeContainer;
>> typedef FastMarchingFilterType::NodeType NodeType;
>> NodeContainer::Pointer seeds = NodeContainer::New();
>> // Software Guide : EndCodeSnippet
>>
>> InternalImageType::IndexType seedPosition;
>>
>> seedPosition[0] = 131;//atoi( argv[3] );
>> seedPosition[1] = 273;//atoi( argv[4] );
>> seedPosition[2] = 36;//atoi( argv[4] );
>>
>>
>> NodeType node;
>> const double seedValue = 0.0;
>>
>> node.SetValue( seedValue );
>> node.SetIndex( seedPosition );
>>
>> seeds->Initialize();
>> seeds->InsertElement( 0, node );
>> // Software Guide : EndCodeSnippet
>> // Software Guide : BeginCodeSnippet
>> fastMarching->SetTrialPoints( seeds );
>> // Software Guide : EndCodeSnippet
>>
>> // Here we configure all the writers required to see the intermediate
>> // outputs of the pipeline. This is added here only for
>> // pedagogical/debugging purposes. These intermediate output are
>> normaly not
>> // required. Only the output of the final thresholding filter should be
>> // relevant. Observing intermediate output is helpful in the process
>> of
>> // fine tuning the parameters of filters in the pipeline.
>> //
>> CastFilterType::Pointer caster1 = CastFilterType::New();
>> CastFilterType::Pointer caster2 = CastFilterType::New();
>> CastFilterType::Pointer caster3 = CastFilterType::New();
>> CastFilterType::Pointer caster4 = CastFilterType::New();
>> WriterType::Pointer writer1 = WriterType::New();
>> WriterType::Pointer writer2 = WriterType::New();
>> WriterType::Pointer writer3 = WriterType::New();
>> WriterType::Pointer writer4 = WriterType::New();
>> caster1->SetInput( smoothing->GetOutput() );
>> writer1->SetInput( caster1->GetOutput() );
>> writer1->SetFileName("../data/FastMarchingFilterOutput1..hdr");
>> caster1->SetOutputMinimum( 0 );
>> caster1->SetOutputMaximum( 255 );
>> writer1->Update();
>> caster2->SetInput( gradientMagnitude->GetOutput() );
>> writer2->SetInput( caster2->GetOutput() );
>> writer2->SetFileName(".../data/FastMarchingFilterOutput2.hdr");
>> caster2->SetOutputMinimum( 0 );
>> caster2->SetOutputMaximum( 255 );
>> writer2->Update();
>> caster3->SetInput( sigmoid->GetOutput() );
>> writer3->SetInput( caster3->GetOutput() );
>> writer3->SetFileName("../data/FastMarchingFilterOutput3.hdr");
>> caster3->SetOutputMinimum( 0 );
>> caster3->SetOutputMaximum( 255 );
>> writer3->Update();
>> caster4->SetInput( fastMarching->GetOutput() );
>> writer4->SetInput( caster4->GetOutput() );
>> writer4->SetFileName("../data/FastMarchingFilterOutput4.hdr");
>> caster4->SetOutputMinimum( 0 );
>> caster4->SetOutputMaximum( 255 );
>>
>> // Software Guide : BeginLatex
>>
>> //
>> // Software Guide : EndLatex
>> // Software Guide : BeginCodeSnippet
>> fastMarching->SetOutputSize(
>> reader->GetOutput()->GetBufferedRegion().GetSize() );
>> // Software Guide : EndCodeSnippet
>>
>>
>> //
>> // Software Guide : EndLatex
>> const double stoppingTime = atof( argv[4] );
>> // Software Guide : BeginCodeSnippet
>> fastMarching->SetStoppingValue( stoppingTime );
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> try
>> {
>> writer->Update();
>> }
>> catch( itk::ExceptionObject & excep )
>> {
>> std::cerr << "Exception caught !" << std::endl;
>> std::cerr << excep << std::endl;
>> }
>> // Software Guide : EndCodeSnippet
>>
>> writer4->Update();
>>
>> // The following writer type is used to save the output of the
>> // time-crossing map in a file with appropiate pixel representation. The
>> // advantage of saving this image in native format is that it can be
>> used
>> // with a viewer to help determine an appropriate threshold to be used
>> on
>> // the output of the \code{fastmarching} filter.
>> //
>> typedef itk::ImageFileWriter< InternalImageType > InternalWriterType;
>> InternalWriterType::Pointer mapWriter = InternalWriterType::New();
>> mapWriter->SetInput( fastMarching->GetOutput() );
>> mapWriter->SetFileName("../data/FastMarchingFilterOutput5.hdr");
>> mapWriter->Update();
>> InternalWriterType::Pointer speedWriter = InternalWriterType::New();
>> speedWriter->SetInput( sigmoid->GetOutput() );
>> speedWriter->SetFileName("../data/FastMarchingFilterOutput6.hdr");
>> speedWriter->Update();
>> InternalWriterType::Pointer gradientWriter = InternalWriterType::New();
>> gradientWriter->SetInput( gradientMagnitude->GetOutput() );
>> gradientWriter->SetFileName("../data/FastMarchingFilterOutput7.hdr");
>> gradientWriter->Update();
>>
>> return 0;
>> }
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090225/88fa9b4e/attachment-0001.htm>
More information about the Insight-users
mailing list