Store Non-Pixel Data In Image#
Note
Wish List Still needs additional work to finish proper creation of example.
Synopsis#
Store non-pixel associated data in an image.
Results#
Note
Help Wanted Implementation of Results for sphinx examples containing this message. Reconfiguration of CMakeList.txt may be necessary. Write An Example <https://itk.org/ITKExamples/Documentation/Contribute/WriteANewExample.html>
Code#
C++#
#include <itkImage.h>
#include <itkMetaDataDictionary.h>
#include <itkMetaDataObject.h>
#include <itkImageRegionIterator.h>
#include <itkImageFileWriter.h>
#include <itkImageFileReader.h>
using ImageType = itk::Image<unsigned char, 2>;
static void
CreateImage(ImageType::Pointer image);
int
main()
{
// Create an image
auto image = ImageType::New();
CreateImage(image);
// Store some data in it
itk::MetaDataDictionary dictionary;
itk::EncapsulateMetaData<float>(dictionary, "ASimpleFloat", 1.2);
image->SetMetaDataDictionary(dictionary);
// View all of the data
dictionary.Print(std::cout);
// View the data individually
auto itr = dictionary.Begin();
while (itr != dictionary.End())
{
std::cout << "Key = " << itr->first << std::endl;
std::cout << "Value = ";
itr->second->Print(std::cout);
std::cout << std::endl;
++itr;
}
// Write the image (and the data) to a file
using WriterType = itk::ImageFileWriter<ImageType>;
auto writer = WriterType::New();
writer->SetFileName("test.mhd");
writer->SetInput(image);
writer->Update();
// Read the image (and data) from the file
using ReaderType = itk::ImageFileReader<ImageType>;
auto reader = ReaderType::New();
reader->SetFileName("test.mhd");
// Display the data
std::cout << "Data read from file:" << std::endl;
reader->GetMetaDataDictionary().Print(std::cout);
return EXIT_SUCCESS;
}
void
CreateImage(ImageType::Pointer image)
{
ImageType::IndexType start;
start.Fill(0);
ImageType::SizeType size;
size.Fill(10);
ImageType::RegionType region;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
itk::ImageRegionIterator<ImageType> imageIterator(image, image->GetLargestPossibleRegion());
while (!imageIterator.IsAtEnd())
{
imageIterator.Set(20);
++imageIterator;
}
}
Classes demonstrated#
-
class MetaDataDictionary
Provides a mechanism for storing a collection of arbitrary data types.
The
MetaDataDictionary, along with the MetaDataObject derived template classes, is designed to provide a mechanism for storing a collection of arbitrary data types. The main motivation for such a collection is to associate arbitrary data elements with itk DataObjects.- Author
Hans J. Johnson
The MetaDataDictionary implements shallow copying with copy on write behavior. When a copy of this class is created, the new copy will be shared with the old copy via C++11 shared pointers. When a non-constant operation is done, if the dictionary is not unique to this object, then a deep copy is performed. This make is very cheap to create multiple copies of the same dictionary if they are never modified.
- ITK Sphinx Examples: