CPU, SMP and GPU implementations of Nohalo level 1, a fast co-convex antialiasing image resampler
Departement de mathematiques et d’informatique, Universite Laurentienne, Sudbury ON, P3E 2C6 Canada
Proceedings of the 2nd Canadian Conference on Computer Science and Software Engineering, C3S2E ’09, 2009
@conference{robidoux2009cpu,
title={CPU, SMP and GPU implementations of Nohalo level 1, a fast co-convex antialiasing image resampler},
author={Robidoux, N. and Gong, M. and Cupitt, J. and Turcotte, A. and Martinez, K.},
booktitle={Proceedings of the 2nd Canadian Conference on Computer Science and Software Engineering},
pages={185–195},
year={2009},
organization={ACM}
}
This article introduces Nohalo level 1 (“Nohalo”), the simplest member of a family of image resamplers which straighten diagonal interfaces without adding noticeable nonlinear artifacts. Nohalo is interpolatory, co-monotone, co-convex, antialiasing, local average preserving, continuous, and exact on linears. Like many edge-enhancing methods, Nohalo has two main stages: first, nonlinear interpolation is used to create a double-density version of the original image; this double-density image is then resampled with bilinear interpolation. Nohalo is especially suited for GPU computing because the nonlinear slopes can be computed once and stored in a low bit-depth texture without rounding error, because the final bilinear stage can be performed in hardware, and because monotonicity allows full use of the texture’s dynamic range. Demand-driven implementations for CPU’s and SMPs are more complex, and require extra work to fix bottlenecks. Efficient implementations of the minmod function are key to performance. Three implementations of Nohalo are presented and bench-marked: a CPU version in C for the graphics library GEGL, an SMP version in C++ for the graphics library VIPS and a GPU version in HLSL for DirectX. The GPU implementation is branch-free thanks to the discovery of a simple formula for the pixel values of the double density image. Branches are eliminated in the demand-driven C/C++ implementations by reflecting, if needed, Nohalo’s 12-point stencil with pointer shifts. Overall, Nohalo is not much slower than standard bicubic resamplers. Compared to twenty-three alternatives in tests involving the re-enlargement of images downsampled with nearest neighbour, Nohalo gets the best PSNRs.
December 25, 2010 by hgpu