Problems with coursera image blur matlab problem
1 次查看(过去 30 天)
显示 更早的评论
Hey all,
I am near completing the introduction to matlab programming course on Coursera.
function[output] = blur(img,w)
change = w;
emptymatrix = zeros(length(img(:,1)),length(img(1,:)));
for z = 1:length(img(1,:))
for i = 1:length(img(:,1))
if (i + change) <= length(img(:,1)) && (i - change) >= 1 && (z + change) <= length(img(1,:)) && (z - change) >= 1
submatrix = img((i-change):(i+change),(z-change):(z+change));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif i == 1 && z == 1
submatrix = img((i):(i+change),(z):(z+change));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif i == length(img(:,1)) && z == length(img(1,:))
submatrix = img((i-change):(i),(z-change):(z));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif i == 1 && z == length(img(1,:))
submatrix = img((i):(i+change),(z-change):(z));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif i == length(img(:,1)) && z == 1
submatrix = img((i-change):(i),(z):(z+change));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif i == 1 && z-change >= 1 && z+change <= length(img(1,:))
submatrix = img((i):(i+change),(z-change):(z+change));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif i == length(img(:,1)) && z-change >= 1 && z+change <= length(img(1,:))
submatrix = img((i-change):(i),(z-change):(z+change));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif z == 1 && i-change >= 1 && i+change <= length(img(:,1))
submatrix = img((i-change):(i+change),(z):(z+change));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
elseif z == length(img(1,:)) && i-change >= 1 && i+change <= length(img(:,1))
submatrix = img((i-change):(i+change),(z-change):(z));
emptymatrix(i,z) = uint8(sum(submatrix(:))/numel(submatrix));
output = uint8(emptymatrix);
end
end
end
output = uint8(output);
end
I have attached a screenshot of the problem below and of the output the online program is giving me.
Could anyone give me a helping hand as to where I am going wrong?
0 个评论
采纳的回答
Walter Roberson
2020-4-13
编辑:Walter Roberson
2020-4-13
I would suggest to you that you could save a lot of code by using max() and min() on the coordinates, like
max(1, column-w):min(column+w, number_of_columns)
That will get you a block of values that you can take the mean of.
10 个评论
更多回答(1 个)
Muhammad Qaisar Ali
2020-6-27
function output = blur(img,w);
[r,c]=size(img);
output=ones(r,c);
for ri=1:r
for ci=1:c
% checking for indicies,and making limits for sub matrix.
if ri-w<1
sub_mat_all_row_indicies=1:(ri+w);
elseif ri+w>r
sub_mat_all_row_indicies=(ri-w):r;
else
sub_mat_all_row_indicies=(ri-w):(ri+w);
end
if ci-w<1
sub_mat_all_col_indicies=1:(ci+w);
elseif ci+w>c
sub_mat_all_col_indicies=(ci-w):c;
else
sub_mat_all_col_indicies=(ci-w):(ci+w);
end
sub_mat=img(sub_mat_all_row_indicies,sub_mat_all_col_indicies); %make sub matrix/window.
% bluring or averaging.
output(ri,ci)=mean(sub_mat(:));
end
end
output=uint8(output); %converting to grayscle. 0 to 255.
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!