Combining probing of pixel values with streaming

(grothausmann.roman) #1

Hi!

How would I have to adjust the code of my CLI probeCoords to employ streaming? It just loads an image and reports the pixel values for some specific indices and is based on https://itk.org/Doxygen/html/Examples_2DataRepresentation_2Image_2Image3_8cxx-example.html.
This should be possible to realise with streaming, however just adding StreamingImageFilter does not suffice because only for one chunk GetPixel() will work and when all pixels are probed further streaming is not necessary and should be stopped. I guess most efficient would be to test every chunk if GetPixel() succeeds for all specified indices and to continue until all are found. But how to check if GetPixel() succeeded within a chunk?

Thanks for any help or hints.
Roman

(Bradley Lowekamp) #2

You should call Image::SetRequestedRegion before calling update. If the input Image file format supports streaming then just the requested region will be read.

(grothausmann.roman) #3

Many thanks @blowekamp for your feedback. So I basically should create a one-pixel sized region for each index before each GetPixel()? Would it matter (be faster) if the list of indices is sorted according to their first appearance when streaming?

(Bradley Lowekamp) #4

I don’t think doing them in order would make much of a difference since this operation is going all the way out to disk.

If you ordered the query points, then grouped them into the same slice or scan line. Then reduced the number of requested region to take advantage of the coherence it might make a performance difference.

1 Like
(grothausmann.roman) #5

Wonderful, works like a charm with these changes, nearly no loading time and hardly any memory footprint. Many thanks @blowekamp for the help!

2 Likes
(Bradley Lowekamp) #6

Great! Glad you were able to get it working.