Shrinking image by averaging
조회 수: 7 (최근 30일)
이전 댓글 표시
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
Rik
2020년 11월 20일
편집: John Kelly
2021년 1월 15일
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.
답변 (2개)
Michael Hawks
2018년 10월 17일
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
Sean de Wolski
2021년 1월 15일
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
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!