I know that there are many ways to upscale (interpolate) an image using bilinear, bicubic, sinc... Somehow, these same algorithms can also be used to downscale an image. But when it comes to subsampling, I've come across only two methods: Gaussian-blur then discard some rows and columns, or block-averaging.

Is there such thing as bilinear, bicubic,... subsampling?

Instead of Gaussian-blurring then discarding or block-averaging, can/should I do Gaussian-blurring then block-averaging? or bilinear, bicubic,...subsampling if there is such thing?

What I'm doing is trying to make image Gaussian and Laplacian pyramids; but I'm not sure how to decimate and interpolate the image. (Some Python code with Scipy/Numpy would really help.)

Thank you very much.


When we have a discrete signal it is usually sampled on a grid of indices.
Both sub sampling and down scaling changes the grid. The classic definition is that Sub Sampling is a step in Down Scaling.

Sub Sampling

Given a signal which is sampled on a grid of indices Sub Sampling means to keep only the samples which on a sub set of the indices grid.

Down Scaling

Changing the sampling grid in 2 steps:

  1. Apply Low Pass Filter (Anti Aliasing Filter).
  2. Apply Sub Sampling.

Have you looked to the pyUp and pyDown functions in opencv? They upscale and downscale images using a gaussian pyramids.

opencv image filtering page


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.