[cairo] image downsampling quality

Bill Spitzak spitzak at gmail.com
Thu Jan 2 14:01:34 PST 2014

I think there is some confusion here.

Unless there is a saved intermediate image that is reused for more than 
one transform, there should be only one filter.

To do a transform, this filter starts out as a continuous field in the 
output space, centered on the desired output pixel. This field is then 
inverse-transformed to input space. This will rotate, scale, and 
translate the filter by an arbitrary non-integer amount (the fraction 
will be different for each output pixel!)

The input image is then multiplied by this filter and the resulting sum 
is the value of that output pixel.

For reconstruction filters it is by definition correct to treat the 
input image as impulses in the centers of the pixels. Therefore the 
value to multiply by is the value of the transformed filter at the 
center of each input pixel.

There is no way around this. To produce a single output pixel there must 
be exactly one weight applied to each input pixel. This weight is going 
to depend on the scaling factor and on the fractional result of the 
inverse transform. Using more than one filter is not going to fix this, 
all you can do is blur the incorrect result of the first filter.

I think there may be some confusion with mipmapping, which indeed 
applies two filters. The first is to create the mipmap plane. Although 
all the rules above apply to this transform, it is usually an integer 
down-scale with no rotation, which does make a single set of filter 
weights reusable. This mipmap plane is then sampled with a second 
filter, where all the rules I describe above apply, including the 
unavoidable fact that there are different sets of weights for each 
output pixel. However it is in effect always being up-scaled, therefore 
a bilinear filter is always used. Applying two transforms is always 
going to produce more blurring than a single transform, you cannot avoid 
this, and trying to use sync or sharpening to fix it is futile. And all 
of this is a total waste of time unless the mipmap is saved and reused 
for further transforms.

Søren Sandmann wrote:
> Krzysztof Kosiński <tweenk.pl at gmail.com> writes:
>> Impulse sampling is always used when the given dimension is upscaled.
>> For downscaling, it seems that Lanczos3 is used for both sampling and
>> reconstruction. Should Lanczos3 sampling be used together with box
>> reconstruction in that case?
> For downscaling an image using Lanczos sampling, I'd use impulse
> reconstruction.
> Søren

More information about the cairo mailing list