Function output wrong size

9 次查看(过去 30 天)
I have to write a function that blurs an image file.
The idea is to take an input 'img', then using the value of each individual pixel, take the mean of a submatrix with that pixel as the centre of 2*w+1 sub matrix and use that value to replace the pixels in the same position in a generated new 'blurred' image. I hope that makes sense.
This is what I've written so far which appears to work but is apparently outputting a 1x9 vector with the wrong result and I can't figure out why or how to fix it. Any help appreciated.
function output = blur(img,w)
[row, col] = size(img);
img = double(img);
temp_img = zeros(row,col, 'uint8');
for i = 1:row
for j = 1:col
r1 = max(1,i-w);
r2 = min(row,i+w);
c1 = max(1,j-w);
c2 = min(col,j+w);
temp_matrix = img(r1:r2,c1:c2);
val_2 = mean(temp_matrix(:));
temp_img(r1:r2,c1:c2) = val_2;
end
end
output = uint8(temp_img);
end

采纳的回答

Rik
Rik 2020-8-26
I don't understand why you would store the result val_2 in multiple positions, instead of only in i,j.
Another thing I don't understand is why you don't use convn (or conv2 or imfilter) to do this. Those will flip the kernel, but since your kernel should be flat (and therefore symetrical), that doesn't matter.
  1 个评论
Tom Edwards
Tom Edwards 2020-8-26
Actually, you know what, me either, I think I misunderstood the assignment and thought that we were supposed to use the mean value for the whole submatrix. Either way I just corrected it and it works! Thanks Rik.

请先登录,再进行评论。

更多回答(0 个)

标签

Community Treasure Hunt

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

Start Hunting!

Translated by