# code does not seem to work but is not giving any errors

3 views (last 30 days)

Show older comments

I=imread('phonebox2_noisy.bmp');

a=I;

[row, col, channel]=size(a);

red=a(:,:,1);

green=a(:,:,2);

blue=a(:,:,3);

a1 = red;

a2 = green;

a3 = blue;

for i=2:1:row-1

for j = 2:1:col-1

a1(i,j)= (red(i-1,j-1)+red(i-1,j)+red(i-1,j+1)+red(i,j-1)+red(i,j)+red(i,j+1)+...

red(i+1,j-1)+red(i+1,j)+red(i+1,j+1));

a1=sort(a1);

red(i,j)= a1(5);

a2(i,j)= (green(i-1,j-1)+green(i-1,j)+green(i-1,j+1)+green(i,j-1)+green(i,j)+green(i,j+1)+...

green(i+1,j-1)+green(i+1,j)+green(i+1,j+1));

a2=sort(a2);

green(i,j)= a2(5);

a3(i,j)= (blue(i-1,j-1)+blue(i-1,j)+blue(i-1,j+1)+blue(i,j-1)+blue(i,j)+blue(i,j+1)+...

blue(i+1,j-1)+blue(i+1,j)+blue(i+1,j+1));

a3=sort(a3);

blue(i,j)= a3(5);

end

end

final=cat(3,red,green,blue);

figure;

imshow(a);

title('latte noisy');

figure;

imshow(final);

title('latte');

##### 1 Comment

Benjamin Thompson
on 27 Jan 2022

### Accepted Answer

Walter Roberson
on 26 Jan 2022

a1(i,j)= (red(i-1,j-1)+red(i-1,j)+red(i-1,j+1)+red(i,j-1)+red(i,j)+red(i,j+1)+...

red(i+1,j-1)+red(i+1,j)+red(i+1,j+1));

As written, that is a problem because red is going to be an integer data type such as uint8, and adding uint8 gives you a uint8 -- which will very likely overflow.

a1=sort(a1);

You are doing that within the loop. So you are replacing one element of a1 at a time, and sorting the entire a1 array.

red(i,j)= a1(5);

a1 is a 2D array the same size as red so a1(5) is likely to be the same as a1(5,1)

I get the impression that your code is attempting to do a median filter. To do a median filter "by hand" (instead of using medfilt2() ) you should not add those elements of red, you should extract them. For example,

a1 = red(i-1:i+1, j-1:j+1);

a1 = sort(a1(:));

### More Answers (0)

### See Also

### Community Treasure Hunt

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

Start Hunting!