How to downsample an image by taking the average

I have a grayscale image A of size 512x512. I want to downsample this image by a factor of 3. This normally means that the first of the 3 pixels is selected as the output pixel value and the rest two pixels are discarded. However, I want to perform downsampling by a factor of 3 such that the average of the three pixels is taken and selected as the output value. I want to perform this along the row and the column of the image. Is there a built-in function within Matlab for this one? Any idea would be appreciated.
Thanks

Respuestas (1)

Image Analyst
Image Analyst el 27 de Jun. de 2015
Use imresize() function - it's meant for this kind of thing.
smallImage = imresize(bigImage, 1/3, 'bilinear');
There are other interpolation options also, so look at the documentation.

3 comentarios

Robert Jansen
Robert Jansen el 24 de Mzo. de 2021
A bilinear downsample is definitely NOT the same as averaging over a window.
Image Analyst
Image Analyst el 24 de Mzo. de 2021
Editada: Image Analyst el 26 de Mzo. de 2021
If the difference really is important to @mona, she can use blockproc(). Since you forgot to post the code, I'll post that way of doing it below:
averagingFunction = @(x) mean(x.data(:))
smallImage = blockproc(bigImage, [3, 3] , averagingFunction)
Thanks Robert for pointing out that there are differences.
Attached are several very useful and informative demos on how to use blockproc() in a variety of ways.
Daniel Torres
Daniel Torres el 24 de Abr. de 2023
What is the difference between bilinear and averaging? Is it something that could have an important impact on my analysis? I have checked the result of both processes and there is no big difference to my inexpert eyes.
Thanks

Iniciar sesión para comentar.

Preguntada:

el 27 de Jun. de 2015

Comentada:

el 24 de Abr. de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by