How to coded this filter in Matlab
    2 views (last 30 days)
  
       Show older comments
    

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?
0 Comments
Answers (1)
  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
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
