How to coded this filter in Matlab

2 views (last 30 days)
Rooter Boy
Rooter Boy on 3 Nov 2020
Commented: Rooter Boy on 19 Nov 2020
clc
clear all
img=double(imread('cameraman.tif'));
imshow(uint8(img))
[m n]=size(img);
w = ones(3)
for i=0:m-3
for j=0:n-3
sum=0;
for k=1:3
for l=1:3
sum = sum + img(i+k,j+l)*w(k,l);
end
end
img1(i+1,j+1) = sum/9;
end
end
img2 = uint8(img1);
figure
imshow(img2)
%imwrite(img2,‘output.png','png');
I coded for 1/9*(ones(1) but i can't write for 1/16*[1,2,1;2,4,2;1,2,1] in Matlab. I don't know how to do this. I need same coded for 1/16*[1,2,1;2,4,2;1,2,1]. and if we take i and j = 0, how should the code be? Would you help me please?

Answers (1)

Ameer Hamza
Ameer Hamza on 3 Nov 2020
Write the code like this
clc
clear all
img=double(imread('cameraman.tif'));
imshow(uint8(img))
[m n]=size(img);
w = 1/9*ones(3); % <---- ones(3) is divided by 9
for i=0:m-3
for j=0:n-3
sum=0;
for k=1:3
for l=1:3
sum = sum + img(i+k,j+l)*w(k,l);
end
end
img1(i+1,j+1) = sum; % <---- division by 9 is removed.
end
end
img2 = uint8(img1);
figure
imshow(img2)
Then you can simply replace 'w' with
w = 1/16*[1,2,1;2,4,2;1,2,1];
and it will display correct image.
  7 Comments
Ameer Hamza
Ameer Hamza on 3 Nov 2020
You can just use
for i=1:m-3
for j=1:n-3
Rooter Boy
Rooter Boy on 19 Nov 2020
Sir, could you help me when you are available?
https://www.mathworks.com/matlabcentral/answers/652808-nwc-and-lcm-code-block-in-matlab

Sign in to comment.

Categories

Find more on Image Processing Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!