[Insight-users] UnaryFunctorImageFilter and MetaDataDictionnary

Julien Michel julien.michel at c-s.fr
Tue Oct 27 08:00:04 EDT 2009


Luis Ibanez a écrit :
> Julien,
> 
> One possible way to go about it is to add to the itkProcessObject
> a method that will copy MetaDataDictionaries from one DataObject
> to another.
> 
> As Bill pointed out, though, the challenge with the MetaData
> Dictionary is that filters do not know how to update it.
> 
> For example:
> 
> Even for the simple case of the pixe-wise filter, imagine that someone
> decides to store in the MetaDataDictionary the maximum and minimum
> intensity values of the image. Users would tend to do this using some
> arbitrary tag that is not necessarily an ITK standard.
> 
> Filters such as the IntensityWindowing, Sigmoid, and Normalize, that
> change the intensity range of the image pixels will not properly update
> the MetaDataDictionary in order to reflect the changes in the image
> data.
> 
> 
> Of course, there are other types of data that may still be valid when
> passing through filters, but ... the bottom line is that the MetaData
> Dictionary becomes a carrier of information that can not be certified
> in a systematic way.
> 
> We can still pass the dictionary around, but with the disclaimer that
> every application should use it at its own risk.
> 
> Another option that comes to mind, (since you mention that you
> are deriving from the Image class), is to provide another virtual
> method in the itkImageBase class, that you could overload in you
> satellite image type. In this way, the action performed inside that
> method is really left to your custom implementation.

Dear Luis,

Thank you very much for your answer. I think it is a good idea to 
provide customization points for users (even if they do not derive any 
classes) with a default pass-through behaviour and a proper disclaimer. 
Virtual methods to change the default behaviour might be handy as well.

Actually, I though that the MetaDataDictionnary was indeed a 
customization point for users (but it seems I have been mistaken, or if 
it is it misses disclaimer and advertisement).

I understand that CopyInformation() should not be used to propagate 
these user defined informations and that my fix is harmful.

It was the only solution we found to get our dictionnary copied (and it 
was copied only if using our Image subclass redifining CopyInformation()).

The handling of the user defined information should be left to a proper 
virtual method (even outside GenerateOutputInformation()). This way we 
would not need to call CopyInformation() in GenerateOutputInformation() 
anymore (and we do not mix ITK internals with custom data).

Bill, does this sounds like a good solution to you ?

Best regards,

Julien
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Julien MICHEL - Ingénieur d'études - Traitement d'images
CS Systèmes d'Information - Division ESPACE
Département Information Géographique & Image
Téléphone : +33 561 17 64 27
Email : julien.michel at c-s.fr

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



More information about the Insight-users mailing list