[Insight-developers] MetaIO image IO (mhd/mha) and metadata

Stephen Aylward stephen.aylward at kitware.com
Fri May 28 07:26:44 EDT 2010


Hi Tom,

I'll get to it later today.

Thanks!
s

On Fri, May 28, 2010 at 7:16 AM, Tom Vercauteren
<tom.vercauteren at m4x.org> wrote:
> Hi all,
>
> I have committed a test that illustrates the loss of metadata when
> writing a mhd file through ITK:
> http://public.kitware.com/cgi-bin/viewcvs.cgi/Testing/Code/IO/itkReadWriteImageWithDictionaryTest.cxx?revision=1.1&root=Insight&sortby=date&view=markup
>
> The same test can be used with any file format and I have checked that
> (after a small bug fix in AnalyzeImageIO), it passes whith a .hdr
> file.
>
> In the meantime, I have discovered a bug in MetaIO for which I have
> submitted a patch:
>  http://www.itk.org/Bug/view.php?id=6617
>
> Would someone with write access to MetaIO be kind enough to review the
> patch and commit it?
>
> Thanks,
> Tom
>
> On Wed, May 26, 2010 at 13:56, Tom Vercauteren <tom.vercauteren at m4x.org> wrote:
>> Hi all,
>>
>> I am trying to use mhd files as a simple means of exchanging data. I
>> am however unable to store my metadata in it. This is against what is
>> mentionned in the wiki page ("MetaImage (mhd) [...] Also supports
>> reading and writing [...] Patient Meta Data (orientation, scan date,
>> comments, modality, etc. - user extensible)"):
>>  http://www.itk.org/Wiki/ITK_File_Formats#File_Formats_and_Pixel_Types
>>
>> Here is how I am trying to use it:
>>
>> typedef itk::Image<short,3> ImageType;
>> ImageType::Pointer img; // comes from somewhere
>>
>> itk::MetaDataDictionary & dictionary = img->GetMetaDataDictionary();
>> itk::EncapsulateMetaData<std::string>(dictionary,itk::ITK_VoxelUnits,std::string("mm"));
>> std::string datestr = "26-05-2010"; // try to follow analyze format
>> itk::EncapsulateMetaData<std::string>(dictionary,
>> itk::ITK_ExperimentDate, datestr );
>> std::string timestr = "13-44-00.0"; // try to follow analyze format
>> itk::EncapsulateMetaData<std::string>(dictionary,
>> itk::ITK_ExperimentTime, timestr );
>>
>> typedef itk::ImageFileWriter<ImageType> WriterType;
>> WriterType::Pointer writer = WriterType::New();
>>
>> writer->SetInput( img );
>> writer->SetFileName( "test.mhd" );
>> writer->Update();
>>
>>
>> The content of the mhd file does not reflect the meta dictionary:
>> ObjectType = Image
>> NDims = 3
>> BinaryData = True
>> BinaryDataByteOrderMSB = False
>> CompressedData = False
>> TransformMatrix = 1 0 0 0 1 0 0 0 1
>> Offset = 0 0 0
>> CenterOfRotation = 0 0 0
>> AnatomicalOrientation = RAI
>> ElementSpacing = 0.00118899 0.00118899 1
>> DimSize = 504 422 1
>> ElementType = MET_SHORT
>> ElementDataFile = test.raw
>>
>> Since it is the first time am I trying to use the MetaDataDictionary,
>> could you confirm that this is the right way of doing it?
>>
>> If so, I'll file a bug report with a unit test.
>>
>> Looking at the code here is my understanding of why it is not done:
>>
>> - MetaImageIO::WriteImageInformation is empty
>>
>> - MetaImageIO::ReadImageInformation does not use most of the "ITK_*"
>> tags specified in itkIOCommon.h nor does it seems to iterate on some
>> generic tags
>>
>>
>> Let me know if I am missing something or what would be the best way to
>> fix this problem.
>>
>> Best regards,
>> Tom Vercauteren
>>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
>



-- 

==============================
Stephen R. Aylward, Ph.D.
Director of Medical Imaging Research
Kitware, Inc. - North Carolina Office
http://www.kitware.com
stephen.aylward (Skype)
(919) 969-6990 x300


More information about the Insight-developers mailing list