[Insight-developers] [ITK Community] HDF5 writer streaming
David Froger
david.froger at inria.fr
Tue Jan 7 01:57:58 EST 2014
Thank you Bradley and Matt, I look at both, that's helping!
David
Quoting Matt McCormick (2014-01-05 05:41:50)
> Hi David,
>
> The Meta Image IO can currently stream write, so it may be helpful to
> look at it, too.
>
> Hope this helps,
> Matt
>
> On Mon, Dec 30, 2013 at 8:05 AM, Bradley Lowekamp
> <blowekamp at mail.nih.gov> wrote:
> > This article may be of some use too:
> > http://www.insight-journal.org/browse/publication/729
> > On Dec 30, 2013, at 1:40 AM, David Froger <david.froger at inria.fr> wrote:
> >
> >> Hi all,
> >>
> >> I would like to add writer streaming support to the HDF5 module. Writer
> >> streaming would includes:
> >>
> >> 1) Write a whole array in a new HDF5 file by iteration on subregion writting.
> >> For example: write NZ times an array of dimension (NY*NX) in a new HDF5 file
> >> that will finally store an array of dimensions (NZ*NY*NX).
> >>
> >> 2) Paste (override) a subregion in an existing HDF5 file. (This require to
> >> open the file in a different mode).
> >>
> >> I know how to do it in HDF5, I've looked at the source code of the HDF5 ITK
> >> module, and have some questions on how to patch the HDF5 module.
> >>
> >> To support reading and writing subregion, HDF5 manipulates simple arrays
> >> defining the start and the size of the region to read/write. These arrays are
> >> 'HDFSize' and 'offset' in the method HDF5ImageIO::SetupStreaming of the file
> >> itkHDF5ImageIO.cxx, and their values are set according to the size and index
> >> of the region 'this->GetIORegion()':
> >>
> >> void
> >> HDF5ImageIO
> >> ::SetupStreaming(H5::DataSpace *imageSpace, H5::DataSpace *slabSpace)
> >> {
> >> ImageIORegion regionToRead = this->GetIORegion();
> >> ImageIORegion::SizeType size = regionToRead.GetSize();
> >> ImageIORegion::IndexType start = regionToRead.GetIndex();
> >> //
> >> int numComponents = this->GetNumberOfComponents();
> >>
> >> const int HDFDim(this->GetNumberOfDimensions() +
> >> (numComponents > 1 ? 1 : 0));
> >> hsize_t *offset = new hsize_t[HDFDim];
> >> hsize_t *HDFSize = new hsize_t[HDFDim];
> >> int limit;
> >> //
> >> // fastest moving dimension is intra-voxel
> >> // index
> >> if(numComponents > 1)
> >> {
> >> limit = HDFDim - 1;
> >> offset[limit] = 0;
> >> HDFSize[limit] = numComponents;
> >> }
> >> else
> >> {
> >> limit = HDFDim;
> >> }
> >> for(int i=0; i < limit; i++)
> >> {
> >> offset[limit - i - 1] = start[i];
> >> HDFSize[limit - i - 1] = size[i];
> >> }
> >> slabSpace->setExtentSimple(HDFDim,HDFSize);
> >> imageSpace->selectHyperslab(H5S_SELECT_SET,HDFSize,offset);
> >> delete[] HDFSize;
> >> delete[] offset;
> >> }
> >>
> >> When reading a file, 'this->GetIORegion()' can be modified by calling
> >> reader->GetOutput()->SetRequestedRegion(requestedRegion);
> >> which enables input streaming.
> >>
> >> But how to modifiy 'this->GetIORegion()' when writing in a file, for case 1)
> >> and 2)?
> >>
> >> Which example / source code can I look to get started with writer streaming?
> >>
> >> Thanks for your help!
> >>
> >> David
> >> _______________________________________________
> >> 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.php
> >>
> >> 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
> >
> > _______________________________________________
> > 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.php
> >
> > 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
> > _______________________________________________
> > Community mailing list
> > Community at itk.org
> > http://public.kitware.com/cgi-bin/mailman/listinfo/community
More information about the Insight-developers
mailing list