Code for png image using sobel operator

조회 수: 3 (최근 30일)
Mohaiminul Islam
Mohaiminul Islam 2020년 9월 7일
댓글: Image Analyst 2020년 12월 27일
cc = imread('CocaCola.png');
cc = imread('CocaCola.png');
cc = uint8(cc);
figure, imshow(cc); title('cc');
cc = rgb2gray(cc);
cc = double(cc);
edg = edgy(cc);
% Pre-allocate the filtered_image matrix with zeros
edg = zeros(size(cc));
Mx = [-1 0 1; -2 0 2; -1 0 1];
My = [-1 -2 -1; 0 0 0; 1 2 1];
for i = 1:size(cc, 1) - 2
for j = 1:size(cc, 2) - 2
% Gradient approximations
Gx = sum(sum(Mx.*cc(i:i+2, j:j+2)));
Gy = sum(sum(My.*cc(i:i+2, j:j+2)));
% Calculate magnitude of vector
edg(i+1, j+1) = sqrt(Gx.^2 + Gy.^2);
end
end
edg = uint8(edg);
figure, imshow(edg); title('edg');
thresholdValue = 100; % varies between [0 255]
output_image = max(edg, thresholdValue);
output_image(output_image == round(thresholdValue)) = 0;
output_image = im2bw(output_image);
figure, imshow(output_image); title('Edge Detected Image');
I wrote this code but did't work .please help

답변 (3개)

Fatih Yurekli
Fatih Yurekli 2020년 10월 16일
편집: Walter Roberson 2020년 12월 27일
function [c3] = edgy(c)
s1 = [-1 0 1;-2 0 2;-1 0 1];
s1 = double(s1);
s2 = [1 2 1; 0 0 0;-1 -2 -1];
s2 = double(s2);
c = double(c);
[M N] = size(c);
for i = 1:M-2
for j = 1:N-2
a = c(i:i+2, j:j+2);
a1 = a.*s1;
a2 = a.*s2;
b1= 0;
b2= 0;
for k = 1:3
for l = 1:3
b1 = b1+a1(k,l);
b2 = b2+a2(k,l);
end
end
c1(i,j) =b1;
c2(i,j) = b2;
end
end
c3 = sqrt(c1.^2+c2.^2);
c3 = uint8(c3);
end
  댓글 수: 14
Walter Roberson
Walter Roberson 2020년 12월 27일
Note: it is 7am my time and I have been up all night doing research and answering questions. I am in bed, assisting multiple people at the same time, and hoping to fall asleep.
Image Analyst
Image Analyst 2020년 12월 27일
Prashanth, you know you can click the "Copy code" icon in the upper right of the code blocks here in answers. You don't have to re-type all this in to your MATLAB, which could introduce typos.

댓글을 달려면 로그인하십시오.


Sulaymon Eshkabilov
Sulaymon Eshkabilov 2020년 9월 7일
편집: Sulaymon Eshkabilov 2020년 9월 7일
Hi,
Here is the simple solution with MATLAB's builtin function of Image Processing Toolbox that works quite well:
COCA = imread('CC.png');
BW1 = edge(COCA,'sobel');
figure;
imshow(BW1)
title('Sobel Filter');
  댓글 수: 2
Mohaiminul Islam
Mohaiminul Islam 2020년 9월 7일
didn,t work . could you please write code according to the question given above.
Mohaiminul Islam
Mohaiminul Islam 2020년 9월 7일

댓글을 달려면 로그인하십시오.


Génesis Vivas
Génesis Vivas 2020년 9월 24일
편집: Génesis Vivas 2020년 9월 24일
Hi friend, I think that your problem is that you started in for i = 1:size(cc, 1) - 2, you shouldnt take the border, i=1, what you should do is start from the second position both in the rows and in the columns, and stake out the sums Mx and My, and done!
for i = 2:rows-1
for j = 2:columns-1
  댓글 수: 1
Image Analyst
Image Analyst 2020년 12월 27일
His original indexing code would have had no problem - it never went outside the image. Though most people would have done it like you did. The real problem (and what threw the error) was that he did this:
edg = edgy(cc);
without ever having written edgy function and either saving that in a file on the path (like the current folder), or having it defined down below in his script. You can't call a function if it's not defined and it has to be defined either
  1. in the same script, with the "function" keyword down below the script part of the file, OR
  2. in a separate m-file.

댓글을 달려면 로그인하십시오.

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by