Η ανίχνευση ακμών αποτελεί μια από τις εφαρμογές για την ανάλυση εικόνων με τη βοήθεια των αλγεβρικών τελεστών (άθροισμα, διαφορά, γινόμενο, πηλίκο). Πιο συγκεκριμένα, σε ότι αφορά την ανίχνευση ακμών, η αφαίρεση εικόνων μπορεί να χρησιμοποιηθεί για τον υπολογισμό μιας σημαντικής παραγώγου της εικόνας, της βαθμίδας. Σύμφωνα με την ανίχνευση ακμών, κάθε ένα από τα εικονοστοιχεία της εικόνας εξετάζεται με σκοπό να προσδιοριστεί κατά πόσον ανήκει στο σύνορο ενός αντικειμένου. Τέτοιου είδους εικονοστοιχεία προσδιορίζονται ως στοιχεία ακμών. Η ανίχνευση ακμών πραγματοποιείται με εξέταση της περιοχής κάθε εικονοστοιχείου και ποσοτικοποίησης της κλίσης και της κατεύθυνσης της αλλαγής επιπέδων γκρίζου. Για το σκοπό αυτό χρησιμοποιούνται διάφοροι συνελικτικοί τελεστές, όπως για παράδειγμα ανίχνευση ακμών κατά Roberts, Sobel, Prewitt, Kirsch. [παραπομπή]
Ο κώδικας που χρησιμοποιείται για την υλοποίηση των διάφορων αλγορίθμων ανίχνευσης ακμών έχει ως εξής:
Αρχείο Edgedetection.m
I = imread(‘cameraman.tif’)
BW1 = edge(I,’prewitt’);
BW2 = edge(I,’roberts’);
BW3 = edge(I,’sobel’);
figure, imshow(BW1)
figure, imshow(BW2)
figure, imshow(BW3)
Στις οθόνες που ακολουθούν, επιστρέφεται το αποτέλεσμα της εικόνας που προκύπτει από την εφαρμογή του κάθε αλγορίθμου πάνω στο αρχικό αρχείο.
Ανίχνευση ακμών Prewitt
Ανίχνευση ακμών Roberts
Ανίχ νευση ακμών Sobel
Σε ότι αφορά την ανίχνευση ακμών σύμφωνα με τον αλγόριθμο «kirch», ο κώδικας και τα αρχεία που χρησιμοποιούνται απεικονίζονται ως εξής:
Kirch.m
% Read the sample image in
im = imread(‘cameraman.tif’);
% Find edges using the Canny operator with hysteresis thresholds of 0.1
% and 0.2 with smoothing parameter sigma set to 1.
[edgeim, thresh] = edge_ed(im,’kirsch’,0);
figure(1), imshow(edgeim);
Edge_Ed.m
function [imout, thresh] = edge_ed( im, method, thresh, param2 )
[n,m]= size(im);
xx= 2:m-1;
yy= 2:n-1;
if strcmp(method,’kirsch’)
filt1= [1 2 1;0 0 0;-1 -2 -1]; fim1= conv2(im,filt1,’same’);
filt2= [2 1 0;1 0 -1;0 -1 -2]; fim2= conv2(im,filt2,’same’);
filt3= [1 0 -1;2 0 -2;1 0 -1]; fim3= conv2(im,filt3,’same’);
filt4= [0 1 2;-1 0 1;-2 -1 0]; fim4= conv2(im,filt4,’same’);
imo= reshape(max([abs(fim1(:)) abs(fim2(:)) abs(fim3(:)) abs(fim4(:))]’),n,m);
if nargin<3
thresh= 2* mean(mean( imo(yy,xx) )) ;
end
imout= imo >= thresh ;
xpeak= imo(yy,xx-1) <= imo(yy,xx) & imo(yy,xx) > imo(yy,xx+1) ;
ypeak= imo(yy-1,xx) <= imo(yy,xx) & imo(yy,xx) > imo(yy+1,xx) ;
imout(yy,xx)= imout(yy,xx) & ( xpeak | ypeak );
end
Το αποτέλεσμα που επιστρέφεται από την εκτέλεση του αλγόριθμου, σε ότι αφορά την ανίχνευση ακμών πάνω στην αρχική εικόνα έχει ως εξής: