[Insight-developers] image information reset by gradient magnitude filter
Luis Ibanez
luis.ibanez at kitware.com
Thu Feb 5 10:05:24 EST 2009
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
>
More information about the Insight-developers
mailing list