EDGE function ERROR

34 次查看(过去 30 天)
Eulises Ulloa
Eulises Ulloa 2011-11-17
I'm trying to perform the following operation
%Load the image into matlab
A = imread('before3.jpg');
%Show the image
figure(1)
imshow(A)
I = edge(A, 'sobel');
Using this high pass filter I expect to find the edges of my image but I get the following error while using the edge function.
??? Function EDGE expected its first input, I, to be two-dimensional.
Error in ==> edge>parse_inputs at 564
iptcheckinput(I,{'numeric'},{'nonsparse','2d'},mfilename,'I',1);
Error in ==> edge at 197
[a,method,thresh,sigma,thinning,H,kx,ky] = parse_inputs(varargin{:});
Error in ==> image1 at 21
I = edge(A,'sobel');
The image 'before3.jpg' has value
<1728x2304x3 uint8>
The error says to use a 2 dimensional input but I have not been able to find a way to change my image to a 2 dimensional matrix and keep at the same time the original edges.
I tried
[X, map] = rgb2ind(A,256);
I used as the map a 'gray' scale but it did not work.
Please if you have a different approach that you can recommend me I will be very grateful.

回答(7 个)

JOEL
JOEL 2014-10-1
编辑:DGM 2023-2-11
EFECTIVAMENTE AMIGO, LA FUNCION edge SOLO ADMITE IMAGEN ES ESCALAS GRISES, REALIZA LO SIGUIENTE:
%para leer una imagen
I = imread('casa.jpg');
%% convertir a escalas grises
I=rgb2gray(I);
%hallando contorno
BW = edge(I);
%mostrando contorno
imshow(BW)
slds,
Joel Villavicencio
  3 个评论
Muddasar Khan
Muddasar Khan 2018-2-19
Yes, You are right. We should convert colored image to gray image then edges should be detected

请先登录,再进行评论。


Walter Roberson
Walter Roberson 2011-11-17
rgb2gray() rather than rgb2ind()

Jan
Jan 2011-11-17
In the help text of edge I find:
W = edge(I) takes a grayscale or a binary image I as its input...
I'd expect rgb2gray to perform a proper conversion.

Alex
Alex 2011-11-17
according to the documentation, using imread with a jpeg object results in RGB scale. As in, each pixel is represented by a 3 element vector ['red value' 'green value' 'blue value'];
  1 个评论
Walter Roberson
Walter Roberson 2018-2-19
Not universally true. There are true grayscale jpeg images. But I have only ever encountered one, apart from test images to prove that they exist. Jpeg is nearly always rgb. Never pseudocolor though.

请先登录,再进行评论。


Eulises Ulloa
Eulises Ulloa 2011-11-17
Thank you guys, that really helped.
However, using the edge function after converting my image to gray scale does not give good result in my case. I have seem some examples on the web and even on the documentation of the function in where they use the edge function right after "imread". I always get the needs 2 dimensional input error. Can you tell me if you know other approach for finding the edges of a image.
e.g I would like to perform the edge detection operation on the original image.
  3 个评论
Jan
Jan 2011-11-17
If you want to use the edge-detection on an RGB image, you cannot use the EDGE function. There are a lot of edge-detection methods in the FEX: http://www.mathworks.com/matlabcentral/fileexchange/?term=edge
There are other methods to convert the image to gray-scale also. Consider to sharpen the edges in the HSV color-space at first.

请先登录,再进行评论。


Priscil23
Priscil23 2018-2-15
Just as everyone said, first convert your rgb2gray then to view the output after your desired edge functions use imshow to view the image. I faced the same problem.

priyanka nale
priyanka nale 2019-12-30
close all;
clear ;
I=imread('4.jpg');
figure,imshow(I)
I=rgb2gray(I);
c= edge(I,'sobel');
figure,imshow(c);

Community Treasure Hunt

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

Start Hunting!

Translated by