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

Answers (1)

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 Comments

A bilinear downsample is definitely NOT the same as averaging over a window.
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

Sign in to comment.

Asked:

on 27 Jun 2015

Commented:

on 24 Apr 2023

Community Treasure Hunt

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

Start Hunting!