2D Convolution - Sobel Filter. What is wrong?

28 vues (au cours des 30 derniers jours)
Nisreen Sulayman
Nisreen Sulayman le 11 Sep 2019
img = imread('Davis_Hall.jpg');
% 'Davis_Hall.jpg':color image
img =double(rgb2gray(img));
Gx = double([-1 0 1;-2 0 2;-1 0 1]);
Gx=rot90(Gx,2);
Gy = double([-1 -2 -1; 0 0 0; 1 2 1]);
Gy=rot90(Gy,2);
I= img;
[r,c]=size(I);
Fx = zeros(r,c);
Fy = zeros(r,c);
I = padarray(I,[1 1]);
for i=2:r-1
for j=2:c-1
Fx(i,j)=sum(sum(Gx.*I(i-1:i+1,j-1:j+1)));
Fy(i,j)=sum(sum(Gy.*I(i-1:i+1,j-1:j+1)));
end
end
img=uint8(img);
FMag=sqrt(Fx.^2+Fy.^2);
figure(1)
imshow(img);
title('Original Image');
figure(2)
imshow((abs(Fx))./max(max(Fx)));
title('Gradient in X direction');
figure(3)
imshow(abs(Fy)./max(max(Fy)));
title('Gradient in Y direction');
figure(4)
imshow(FMag./max(max(FMag)));
title('Gradient Magnitude');
% IT IS Not Allowed to use: imfilter, conv2, filter2, conv

Réponses (2)

David Wilson
David Wilson le 12 Sep 2019
Here's my (old) code for a sobel filter:
img = imread('Davis_Hall.jpg');
% 'Davis_Hall.jpg':color image
X =double(rgb2gray(img));
%% Start
Bx = [-1,0,1;-2,0,2;-1,0,1]; % Sobel Gx kernel
By = Bx'; % gradient Gy
Yx = filter2(Bx,X); % convolve in 2d
Yy = filter2(By,X);
G = sqrt(Yy.^2 + Yx.^2); % Find magnitude
Gmin = min(min(G)); dx = max(max(G)) - Gmin; % find range
G = floor((G-Gmin)/dx*255); % normalise from 0 to 255
image(G); axis('image')
colormap gray
Gives the following: DavisH.png
  3 commentaires
David Wilson
David Wilson le 12 Sep 2019
Ah, then this is homework?
Nisreen Sulayman
Nisreen Sulayman le 12 Sep 2019
It is a graded excercise\online course.

Connectez-vous pour commenter.


Nisreen Sulayman
Nisreen Sulayman le 12 Sep 2019
Here is my results:
untitled.jpg
  10 commentaires
Nisreen Sulayman
Nisreen Sulayman le 13 Sep 2019
Modifié(e) : Nisreen Sulayman le 13 Sep 2019
Didn't work!!
Maybe there is something wrong related to the "greader"
We have a good results ... still didn't accept the answer!! (even with first code I have a good results!!)
OR THERE is that kind of silly bug which I couldn't spot.
Nisreen Sulayman
Nisreen Sulayman le 20 Sep 2019
How to normalize a convolved image?
I have got these messages after running
%read the image
img = imread('Davis_Hall.jpg');
I =double(rgb2gray(img));
%Gx = double([-1 0 1;-2 0 2;-1 0 1]);
Gx=[-1 0 1;-2 0 2;-1 0 1];
Gx=rot90(Gx,2);
%Gy = double([-1 -2 -1; 0 0 0; 1 2 1]);
Gy=[-1 -2 -1; 0 0 0;1 2 1];
Gy=rot90(Gy,2);
[r,c]=size(I);
Fx = zeros(r,c);
Fy = zeros(r,c);
FMag=zeros(r,c);
I = padarray(I,[1 1],0,'both');
for i=2:r-1
for j=2:c-1
Fx(i,j)=sum(sum(Gx.*I(i-1:i+1,j-1:j+1)));
Fy(i,j)=sum(sum(Gy.*I(i-1:i+1,j-1:j+1)));
FMag(i,j)=sqrt(power(Fx(i,j),2)+power(Fy(i,j),2));
end
end
Fx=Fx(2:r-1,2:c-1);
Fy=Fy(2:r-1,2:c-1);
FMag=FMag(2:r-1,2:c-1);
img=uint8(img);
figure(1)
imshow(img);
title('Original Image');
figure(2)
imshow((abs(Fx))./max(max(Fx)));
title('Gradient in X direction');
figure(3)
imshow(abs(Fy)./max(max(Fy)));
title('Gradient in Y direction');
figure(4)
imshow(FMag./max(max(FMag)));
title('Gradient Magnitude');
%Fx may have negative values and values which are greater than 255, hence normalize before visualiz
%Fy may have negative values and values which are greater than 255, hence normalize before visualizin
%FMag may have values which are greater than 255, hence normalize before visualizing

Connectez-vous pour commenter.

Catégories

En savoir plus sur Images dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by