[Insight-developers] image information reset by gradient magnitude filter

Luis Ibanez luis.ibanez at kitware.com
Thu Feb 5 10:18:02 EST 2009


Bill,

This is surprising... and worrisome at the same time,

This filter is used in most of the LevelSet examples.

Do we have an idea of when this started failing ?

Also, did you reproduced the problem by using the
CVS HEAD or by using the ITK 3.10 branch ?


    Thanks for any hints,


        Luis


---------------------
Bill Lorensen wrote:
> Luis,
> 
> I was able to reproduce the problem. Now it is fixed.
> 
> Bill
> 
> On Thu, Feb 5, 2009 at 10:05 AM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
> 
>>Hi Richard,
>>
>>Thanks for the report.
>>
>>I couldn't replicate your observation with my build of ITK 3.10.
>>
>>When running the example:
>>
>>   GradientMagnitudeRecursiveGaussianImageFilter.cxx
>>
>>on an image with non-trivial spacing and origin,
>>I still get that origin and spacing on the output.
>>
>>
>>BTW: Why are you calling Update() in the output of the filter
>>    instead of calling Update() on the filter itself ?
>>
>>
>>I see that Bill added a test for this issue today,
>>and committed a change to the filter.
>>
>>
>>Please let us know if that made a difference.
>>
>>
>>  Thanks
>>
>>
>>     Luis
>>
>>
>>-----------------------
>>Richard Beare wrote:
>>
>>>Hi,
>>>I've come across a strange resetting of image information when using
>>>the gradient magnitude filter (code below). All spacing and
>>>orientation information seems to have been reset to default values.
>>>This is using itk 3.10.1 retrieved using the cvs repository, and the
>>>cvs head from about 2 weeks ago under linux. I haven't yet checked any
>>>other filters to see if the problem is more general.
>>>
>>>nifti file report from fslhd of input image:
>>>
>>>sizeof_hdr     348
>>>data_type      INT16
>>>dim0           3
>>>dim1           256
>>>dim2           120
>>>dim3           256
>>>dim4           1
>>>dim5           1
>>>dim6           1
>>>dim7           1
>>>vox_units      mm
>>>time_units     Unknown
>>>datatype       4
>>>nbyper         2
>>>bitpix         16
>>>pixdim0        0.0000000000
>>>pixdim1        0.8203120232
>>>pixdim2        1.1999969482
>>>pixdim3        0.8203120232
>>>pixdim4        0.0000000000
>>>pixdim5        0.0000000000
>>>pixdim6        0.0000000000
>>>pixdim7        0.0000000000
>>>vox_offset     352
>>>cal_max        0.0000
>>>cal_min        0.0000
>>>scl_slope      1.000000
>>>scl_inter      0.000000
>>>phase_dim      0
>>>freq_dim       0
>>>slice_dim      0
>>>slice_name     Unknown
>>>slice_code     0
>>>slice_start    0
>>>slice_end      0
>>>slice_duration 0.000000
>>>time_offset    0.000000
>>>intent         Unknown
>>>intent_code    0
>>>intent_name
>>>intent_p1      0.000000
>>>intent_p2      0.000000
>>>intent_p3      0.000000
>>>qform_name     Aligned Anat
>>>qform_code     2
>>>qto_xyz:1      -0.820312  -0.000000  -0.000000  105.000000
>>>qto_xyz:2      0.000000  1.199997  -0.000000  -74.299637
>>>qto_xyz:3      -0.000000  0.000000  0.820312  -114.179565
>>>qto_xyz:4      0.000000  0.000000  0.000000  1.000000
>>>qform_xorient  Right-to-Left
>>>qform_yorient  Posterior-to-Anterior
>>>qform_zorient  Inferior-to-Superior
>>>sform_name     Scanner Anat
>>>sform_code     1
>>>sto_xyz:1      -0.820312  -0.000000  0.000000  105.000000
>>>sto_xyz:2      -0.000000  1.199997  -0.000000  -74.299637
>>>sto_xyz:3      0.000000  0.000000  0.820312  -114.179565
>>>sto_xyz:4      0.000000  0.000000  0.000000  1.000000
>>>sform_xorient  Right-to-Left
>>>sform_yorient  Posterior-to-Anterior
>>>sform_zorient  Inferior-to-Superior
>>>file_type      NIFTI-1+
>>>file_code      1
>>>descrip
>>>aux_file
>>>
>>>Result image:
>>>sizeof_hdr     348
>>>data_type      INT16
>>>dim0           3
>>>dim1           256
>>>dim2           120
>>>dim3           256
>>>dim4           1
>>>dim5           1
>>>dim6           1
>>>dim7           1
>>>vox_units      mm
>>>time_units     Unknown
>>>datatype       4
>>>nbyper         2
>>>bitpix         16
>>>pixdim0        0.0000000000
>>>pixdim1        1.0000000000
>>>pixdim2        1.0000000000
>>>pixdim3        1.0000000000
>>>pixdim4        0.0000000000
>>>pixdim5        0.0000000000
>>>pixdim6        0.0000000000
>>>pixdim7        0.0000000000
>>>vox_offset     352
>>>cal_max        0.0000
>>>cal_min        0.0000
>>>scl_slope      1.000000
>>>scl_inter      0.000000
>>>phase_dim      0
>>>freq_dim       0
>>>slice_dim      0
>>>slice_name     Unknown
>>>slice_code     0
>>>slice_start    0
>>>slice_end      0
>>>slice_duration 0.000000
>>>time_offset    0.000000
>>>intent         Unknown
>>>intent_code    0
>>>intent_name
>>>intent_p1      0.000000
>>>intent_p2      0.000000
>>>intent_p3      0.000000
>>>qform_name     Aligned Anat
>>>qform_code     2
>>>qto_xyz:1      -1.000000  0.000000  0.000000  -0.000000
>>>qto_xyz:2      0.000000  -1.000000  0.000000  -0.000000
>>>qto_xyz:3      0.000000  0.000000  1.000000  0.000000
>>>qto_xyz:4      0.000000  0.000000  0.000000  1.000000
>>>qform_xorient  Right-to-Left
>>>qform_yorient  Anterior-to-Posterior
>>>qform_zorient  Inferior-to-Superior
>>>sform_name     Scanner Anat
>>>sform_code     1
>>>sto_xyz:1      -1.000000  0.000000  0.000000  -0.000000
>>>sto_xyz:2      0.000000  -1.000000  0.000000  -0.000000
>>>sto_xyz:3      0.000000  0.000000  1.000000  0.000000
>>>sto_xyz:4      0.000000  0.000000  0.000000  1.000000
>>>sform_xorient  Right-to-Left
>>>sform_yorient  Anterior-to-Posterior
>>>sform_zorient  Inferior-to-Superior
>>>file_type      NIFTI-1+
>>>file_code      1
>>>descrip
>>>aux_file
>>>
>>>Code:
>>>
>>>#include <itkGradientMagnitudeRecursiveGaussianImageFilter.h>
>>>#include <itkImageFileWriter.h>
>>>#include <itkImageFileReader.h>
>>>
>>>
>>>template <class TImage>
>>>void writeIm(typename TImage::Pointer Im, std::string filename)
>>>{
>>> typedef typename itk::ImageFileWriter<TImage> WriterType;
>>> typename WriterType::Pointer writer = WriterType::New();
>>> writer->SetInput(Im);
>>> writer->SetFileName(filename.c_str());
>>> writer->Update();
>>>}
>>>
>>>template <class TImage>
>>>typename TImage::Pointer readIm(std::string filename)
>>>{
>>> typedef typename itk::ImageFileReader<TImage> ReaderType;
>>> typename ReaderType::Pointer reader = ReaderType::New();
>>> reader->SetFileName(filename.c_str());
>>> typename TImage::Pointer result = reader->GetOutput();
>>> try
>>>   {
>>>   result->Update();
>>>   }
>>> catch(itk::ExceptionObject &ex)
>>>   {
>>>   std::cout << ex << std::endl;
>>>   std::cout << filename << std::endl;
>>>   return 0;
>>>   }
>>>   result->DisconnectPipeline();
>>>   return(result);
>>>}
>>>
>>>int main(int argc, char * argv[])
>>>{
>>>
>>> const int dim = 3;
>>> typedef short PixType;
>>> typedef itk::Image<PixType, dim> RawImType;
>>>
>>> typedef
>>>itk::GradientMagnitudeRecursiveGaussianImageFilter<RawImType,RawImType>
>>>GradFiltType;
>>>
>>> RawImType::Pointer raw;
>>> RawImType::Pointer grad;
>>>
>>> raw = readIm<RawImType>(argv[1]);
>>> GradFiltType::Pointer gradfilt = GradFiltType::New();
>>>
>>> gradfilt->SetInput(raw);
>>> gradfilt->SetSigma(0.01);
>>> grad = gradfilt->GetOutput();
>>> grad->Update();
>>> grad->DisconnectPipeline();
>>> std::cout << raw->GetSpacing() << grad->GetSpacing() << std::endl;
>>> writeIm<RawImType>(grad, "grad.nii.gz");
>>>
>>> return (EXIT_SUCCESS);
>>>}
>>>_______________________________________________
>>>Insight-developers mailing list
>>>Insight-developers at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-developers
>>>
>>
>>_______________________________________________
>>Insight-developers mailing list
>>Insight-developers at itk.org
>>http://www.itk.org/mailman/listinfo/insight-developers
>>
> 
> 


More information about the Insight-developers mailing list