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

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.
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