I'm trying to create a vector of the averages of a 3x3 kernel for each layer of an image. I have the following code where I have initialized red/green/blueAvg as 0, and red/green/blue as an empty vector [ ]. I have checked the debugger and the vector values seem to be the right size, at 1x296, after only the for y = ... loop is run but once the for x = ... loop is exited, the vector value increases to 1x48544....Any ideas? (For more info: red/green/blueDoub are equal to double values at that layer (instead of uint8))
for x = 2:row-1
for y = 2:col-1
redAvg = mean(mean(redDoub(x - 1: x +1, y - 1: y + 1)));
greenAvg = mean(mean(greenDoub(x - 1: x +1, y - 1: y + 1)));
blueAvg = mean(mean(blueDoub(x - 1: x +1, y - 1: y + 1)));
red = [red redAvg];
green = [green greenAvg];
blue = [blue blueAvg];
end
end

 채택된 답변

Walter Roberson
Walter Roberson 2018년 3월 2일

1 개 추천

That sounds about right. 48544 is 296 * 164, so you are probably working with a 298 x 166 matrix and appending one entry for each interior member of the matrix. This is what you say you want to do, since you asked to create a vector for each layer of an image.
Have you considered simplifying your code?
redavg = conv2(redDoub, ones(3,3)/9, 'same');
greenavg = conv2(greenDoub, ones(3,3)/9, 'same');
blueavg = conv2(blueDoub, ones(3,3)/9, 'same');
red = reshape( redavg(2:end-1, 2:end-1), 1, []);
blue = reshape( blueavg(2:end-1, 2:end-1), 1, []);
green = reshape( greenavg(2:end-1, 2:end-1), 1, []);

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by