[cairo] [Pixman] Supersampling - 2nd attempt

Bill Spitzak spitzak at gmail.com
Mon Aug 16 14:17:25 PDT 2010

Soeren Sandmann wrote:

>         - interpolate to define the image on a continuous domain
>         - transform
>         - resample

The problem I am having is that this does not match how filtering of 
transforms is done in any image processing software I am familiar with.

This is how all software I am familiar with works, this replaces the 
three steps you show above:

	- Figure out the INVERSE transform

	- For each output pixel, the x, y, and inverse transform figures out a 
weighing factor for every pixel in the input image. These are weights 
for input PIXELS, not weights for input "points".

	- Multiply input pixels by these weights and sum to get output pixel.

For a more concrete example, our image transforms consist of translating 
the output x/y into an input axis-aligned rectangle that is as close as 
possible to the area of the output pixel inverse-transformed to the 
input. This rectangle dimensions are then used to scale 2 1-D filters to 
the right size (they are truncated sync or similar functions and the 
non-zero area is about twice the size of the rectangle). These two 
filters are used in a 2-pass algorithm to weigh and sum all the pixels 
in the rectangle and around it to produce the output pixel.

I suspect you think you are describing mip-mapping, but a "sample" in a 
mipmap is not just an X/Y position, but also a "which scaled image" 
number. Mipmap is instead a compression scheme for weighted pixel 
samples, where the same weight for a square of 4 sample pixels can 
instead be specified as 4x weight of a single pixel in the 1/2 sized 
image. (In addition I do not think mipmapping is correct for Cairo: the 
filtering is very poor for non-square transforms, and the overhead is 
high if the samples all come from only one or two of the scaled images.)

You cannot describe the input image as a "continuous domain" and get any 
kind of sampling that is any better than putting the same number of 
samples right in the middle of the pixels. In addition a number of the 
filtering operations demanded by users (sharp edges on transformed 
images, and sharp square pixels when zoomed in) are impossible unless 
the "continuous domain" is defined as constant squares of color and thus 
equivalent to rounding any "point" to the nearest pixel center.

More information about the cairo mailing list