I have a patch for SimpleITK which I am working on to add support for this.
Basically, it adds an ExtractImageFilter when an image is read to specify how to map the dimensions from the 5D file to the lower dimensional image by specifying starting indexes and sizes. If follows the ExtractImageFilter behavior and any dimension specified with a size of 0, is collapsed, so a 5D image could be reduced by specifying the size of the 4th and 5th dimensions as zero into a 3D image, and the channel can be indexed by specifying the starting index. To create a multi-component image, I then used the ComposeImageFilter to create a Vector Image.
What should make this reasonably efficient is that the Reader->Extractor and pipelined, and the reader “should” perform streaming IO of just the requested region/channel.
Here is a snippet of SimpleITK python code which utilizes the proposed interface. In this case I read the whole file into a 4D image collapsing the 4th dimension, then I converted the 4th dimension of channels into the components of a VectorImage with the ComposeImageFilter
reader = sitk.ImageFileReader()
reader.SetFileName(args.filename)
reader.ReadImageInformation()
img_size = reader.GetSize()
reader.SetExtractSize([0 if v == 1 else v for v in img_size])
img = reader.Execute()
out = sitk.Compose( [sitk.Extract(img, img.GetSize()[:3]+(0,), [0,0,0, i]) for i in range(img_size[-1])] )