Imaging operations are a natural target for thread-based optimization. Almost all such operations are divisible into two or more independent operations, which can then be executed in separate threads. Ideally, these threads can execute simultaneously on separate cores or proces-sors.
The straightforward approach to threading is similar to tiling. The code divides the source image and possibly the destination image into blocks or horizontal slices, then assigns threads to operate on each of those blocks.