[Insight-developers] image information reset by gradient magnitude filter
Bill Lorensen
bill.lorensen at gmail.com
Thu Feb 5 10:29:43 EST 2009
Luis,
This error has always been present I believe.
I reproduced the problem using CVS HEAD. I modified the filter's test
by adding non-default image information to the test input. Then, after
the filter runs, I compared the input and output image information.
Before my fix, the information differed. You can duplicate the failure
with my new test, if you comment out my fix (one line) and re-run the
test.
This filter creates an internal image to accumulate results over each
dimension. Since the internal image never copied the image information
from the input image, the internal image had default settings for the
information. This internal image was used as the input to a mini
pipeline. The output of the internal mini-pipeline is grafted onto the
output of the filter.
Note that no tests fail after the error is corrected.
Bill
On Thu, Feb 5, 2009 at 10:18 AM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>
> 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