how to smooth / refine edges ??

57 views (last 30 days)
waqas pervaiz
waqas pervaiz on 6 Jun 2013
Answered: Pallawi Pallawi on 21 Sep 2017
hello all, i have a final image as an output.. as a result of processing image edges got irregular... how can it be possible for me to smooth/refine just the edges not the complete image... actually i was trying to apply gaussian filter on it it smooths the entire image... P.S image type is RGB .. waiting for replies...
Thanks,

Accepted Answer

Sean de Wolski
Sean de Wolski on 6 Jun 2013
Edited: Sean de Wolski on 6 Jun 2013
Similar to what Paul is suggesting:
%Standard IPT Image
I = imread('cameraman.tif');
%Its edges
E = edge(I,'canny');
%Dilate the edges
Ed = imdilate(E,strel('disk',2));
%Filtered image
Ifilt = imfilter(I,fspecial('gaussian'));
%Use Ed as logical index into I to and replace with Ifilt
I(Ed) = Ifilt(Ed);
For an RGB image you may first have to repmat() Ed so that it exists in all three dimensions
Ed3 = repmat(Ed,[1 1 3]);
  4 Comments
waqas pervaiz
waqas pervaiz on 7 Jun 2013
Thanks alot Sean, but i am getting the following errors:
*Error using iptcheckinput Function EDGE expected its first input, I, to be two-dimensional.
Error in edge>parse_inputs (line 547) iptcheckinput(I,{'numeric','logical'},{'nonsparse','2d'},mfilename,'I',1);
Error in edge (line 190) [a,method,thresh,sigma,thinning,H,kx,ky] = parse_inputs(varargin{:});
Error in ed (line 4) E = edge(I,'canny'); *
Sean de Wolski
Sean de Wolski on 7 Jun 2013
If you change the image to be three dimensional, you'll need to either extract a color plane from it or use rgb2gray
For example
Igray = rgb2gray(I);
or
Ired_channel = I(:,:,1);

Sign in to comment.

More Answers (2)

Paul Kelly
Paul Kelly on 6 Jun 2013
I've never tried this but I would probably approach it in the following way:
convert the image to grayscale RGB = imread(imageFile); I = rgb2gray(RGB);
binarise it (this will be quite tricky) or find another way to isolate the edge you are interested in. For example:
level = graythresh(I);
BW = im2bw(I,level);
find the edges of the binarised image:
edgeImage = edge(BW,'canny');
Then use morphological functions to broaden the edges to a reasonable size
Finally use the edge image as a mask for the smoothing operation

Pallawi Pallawi
Pallawi Pallawi on 21 Sep 2017
Image 1 with the gray background was my input image and I removed the gray background with a white one! Now I need to refine the edges ,making it look smoother . I have tried ,gaussian and above suggestions but it does not works.can someone please help me!LOOKING FOR AN URGENT HELP.

Community Treasure Hunt

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

Start Hunting!