After dealing with image pyramids which generate a list of images, and the inverse filters which get a list of inputs and generate an output. I was wondering if we could introduce a base class similar to how ImageToImageFilter works, but in this case ImageToImageListFilter, or ImageListToImage. OrfeoToolBox has the ObjectList module doing exactly this, and seems like a good idea.
I wonder what is your opinion of introducing it into ITK. In my use case, it would be nice to have a Pyramid base class, where all the metadata, and output information of the list of images is abstracted away. What do you think?
In my experience, image pyramids commonly need support, and explicit support for their characteristics could help us perform multi-resolution processing and processing of very large images.
Ideally, we would have a new data structure, itk::ImagePyramid. And corresponding to this data structure would be filters, itk::ImageToImagePyramid, itk::ImagePyramidToImagePyramid, and itk::ImagePyramidToImage that would generate the desired outputs by default and facilitate streaming over the pyramid.
I would think that an ImageList class may be parent of a more specific ImagePyramid class. I see use in representing a large number of channels as an ImageList instead of a VectorImage. Then having a meta-filter which execute another filter or mini-pipeline on each image in the list ( or image in the pyramid ).
This sounds like a great effort to start in a remote module!
As for the naming, I’d say that Pyramid conveys the idea of multi-resolution whereas ImageList does not, so as Brad says, may be the latter can be the parent of the former.