Horizontal average on Image

Given that the mask is hor = 0 0 0, 1 1 1, 0 0 0
I have to apply to my image. Afterwards, find the sum and divide by 3.
My code is:
clear; % Clear the workspace
A = imread('Nature.jpg');
I = imrotate(A,90,'bilinear','loose');
grey = 0.21*I(:,:,1)+0.72*I(:,:,2)+0.07*I(:,:,3);
Grey = double(grey);
HorMask = [0 0 0;1 1 1;0 0 0];
[r,c] = size(Grey);
OUT = zeros(r-3,c-3);
for i = 1:(r-3)
for j = 1:(c-3)
GreySquare = Grey(i:(i+2),j:(j+2));
res = HorMask.*GreySquare;
Divide = res./3;
OUT(i,j) = sum(Divide);
end
end
figure()
imshow(OUT);
However, I am not able to divide by 3. with error message:
Subscripted assignment dimension mismatch.
Error in HorizontalAverage (line 16)
OUT(i,j) = sum(Divide);

1 个评论

"I am not able" does not explain, what the problem is. Do you get an error message? If so, please post it completely. It is much easier to solve a problem than to guess, what the problem is.

请先登录,再进行评论。

 采纳的回答

Andrei Bobrov
Andrei Bobrov 2017-10-6
编辑:Andrei Bobrov 2017-10-6
A = imread('Nature.jpg');
I = imrotate(A,90,'bilinear','loose');
grey = 0.21*I(:,:,1)+0.72*I(:,:,2)+0.07*I(:,:,3);
Grey = double(grey);
OUT = conv2(Grey,[1,1,1]/3,'same'); % or OUT = filter2([1,1,1]/3,Grey);

7 个评论

I do not want to use the in-build function. Is there a way?
Hm! Homework?
[m,n] = size(Grey);
g = [zeros(m,1),Grey,zeros(m,1)];
ii = reshape(1:numel(g),[m, n + 2]);
OUT = mean(g(bsxfun(@plus,ii(:,1:end-2),reshape(m*(0:2),1,1,[]))),3);
Edina Lee
Edina Lee 2017-10-6
编辑:Edina Lee 2017-10-6
There is a error, the dimension do not match. do I need to change to double for the mean and reshape?
If Andrei's new answer of not using built-in functions satisfies your definition of not using built-in functions, then please mark it as accepted to give him reputation points. Otherwise see this link.
Thank you Image Analyst!
Hi Edina! I'm fixed my first comment.
there is still an error and it shows:
Error using sum
Trailing string input must be 'double','native', or 'default'.
Error in mean (line 82)
y = sum(x,dim,flag)/size(x,dim);
Error in Untitled2 (line 10)
OUT = mean(g(bsxfun(@plus,ii(:,1:end-2),reshape(m*(0:2),1,1,[]))),3,'omitnan');

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by