Shrinking image by averaging
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I want to create a function: shrinkbyaveraging(imagematrix) that returns an image that is half as large in both height and width. Each pixel in the returned image should be the average of 4 pixels from the input image. Shrinkbyaveraging only needs to work for images having an even number of rows/columns. However, I do not want to use imresize.
function shrink = shrinkbyaveraging(imagematrix) [row,colm] = size(imagematrix); x = row/2; y = colm/2;
but im not sure what the question is asking since i cannot use imresize. :/
4 Kommentare
Rik
am 20 Nov. 2020
Bearbeitet: John Kelly
am 15 Jan. 2021
Also some deleted comments :
OP responding to Kalyan:
function shrink = shrinkbyaveraging(imagematrix) [row,colm] = size(imagematrix); x = row/2; y = colm/2;
but im not sure what the question is asking since i cannot use imresize. :/
OP responding to Image Analyst:
I am taking a first year introductory computing science course and I dont think it is that hard. But, I am stuck on it.
Antworten (2)
Michael Hawks
am 17 Okt. 2018
Try this:
Nrow = 12; Ncol = 15;
input = rand(Nrow,Ncol);
shifts = [0 0; 0 1; 1 0; 0 -1];
A = zeros(Nrow,Ncol,4);
for ii = 1:4;
out(:,:,ii) = circshift( input, shifts(ii,:) );
end
out = sum( out, 3);
out = out(2:2:end,2:2:end);
In the for loop, we're building up an mxnx4 array of shifted copies of the input array. Then finding the mean over the neighborhood is as easy as averaging along dimension 3. Then the last line downsamples the array to the size you want.
0 Kommentare
Sean de Wolski
am 15 Jan. 2021
This works
img = repmat(1:6,4,1)
shrink = @(x)reshape(sum(reshape(sum(reshape(x,2,1,[])),size(x,1)/2,2,[]),2)./4,size(x,1)/2,[])
shrink(img)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Read, Write, and Modify Image finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!