Ο αλγόριθμος του Law, αποτελεί μια προσέγγιση για την δημιουργία χαρακτηριστικών υφής. Σύμφωνα με τον συγκεκριμένο αλγόριθμο, για τον υπολογισμό της ενέργειας της υφής χρησιμοποιείται ένα σύνολο συνελικτικών μασκών που αναπαριστάνεται με ένα διάνυσμα αριθμών για κάθε εικονοστοιχείο. Οι μάσκες υπολογίζονται με βάση τα διανύσματα που ακολουθούν:
Το διάνυσμα L προ σδιορίζει ένα κεντραρισμένο τοπικό μέσο. Το διάνυσμα E ανιχνεύει ακμές, το διάνυσμα S ανιχνεύει κηλίδες και το διάνυσμα R ανιχνεύει κυματισμούς.
Για την υλοποίηση του αλγορίθμου του Laws με τη βοήθεια του MATLAB, χρησιμοποιείται ένα σύνολο συναρτήσεων, οι οποίες είναι υλοποιημένες σε διαφορετικά αρχεία. Πιο συγκεκριμένα, ο κώδικας που χρησιμοποιείται για την υλοποίηση των αλγορίθμων ανίχνευσης ακμών είναι ο εξής:
Αρχείο LawsTexture.m
function LawsTexture()
clc; % Clear command window.
L5=[1,4,6,4,1];
E5=[-1,-2,0,2,1];
S5=[-1,0,2,0,-1];
R5=[1,-4,6,-4,1];
L5E5=L5’*E5;
E5L5=E5’*L5;
L5R5=L5’*R5;
R5L5=R5’*L5;
E5S5=E5’*S5;
S5E5=S5’*E5;
S5S5=S5’*S5;
R5R5=R5’*R5;
L5S5=L5’*S5;
S5L5=S5’*L5;
E5E5=E5’*E5;
E5R5=E5’*R5;
R5E5=R5’*E5;
S5R5=S5’*R5;
R5S5=R5’*S5;
%Image=imread(‘coins.png’);
Image=imread(‘coins.png’);
subplot(4,4,1);
imshow(Image);
d=5; % Window width
X=preprocess(Image, d);
for kernel = 1:15
disp(kernel); % Print it to the command window.
switch kernel
case 1
%Create the fk with use of convolution(X is the preprocessed image)
fk = conv2(double(X),double(L5E5));
case 2
fk = conv2(double(X),double(E5L5));
case 3
fk = conv2(double(X),double(L5R5));
case 4
fk = conv2(double(X),double(R5L5));
case 5
fk = conv2(double(X),double(S5S5));
case 6
fk = conv2(double(X),double(R5R5));
case 7
fk = conv2(double(X),double(L5S5));
case 8
fk = conv2(double(X),double(S5L5));
case 9
fk = conv2(double(X),double(E5E5));
case 10
fk = conv2(double(X),double(E5R5));
case 11
fk = conv2(double(X),double(R5E5));
case 12
fk = conv2(double(X),double(S5R5));
case 13
fk = conv2(double(X),double(R5S5));
case 14
fk = conv2(double(X),double(E5S5));
case 15
fk = conv2(double(X),double(S5E5));
end
% Calculate texture energy maps.
% m,n are dimensions of fk
[m n] = size(fk);
energyMap = Ek(fk, m, n);
% Show the images. Make sure to add the [].
subplot(4, 4, kernel + 1);
imshow(energyMap, []);
end % of for loop.
return; % from LawsTexture()
Έπειτα καλούνται οι συναρτήσεις στα αρχεία ek.m preprocess.m, έτσι όπως περιγράφονται στην συνέχεια:
Αρχείο ek.m
%Use fk to calculate texture energy map:
function ek=Ek(fk,m,n)
for i=8:m-7
for j=8:n-7
ek(i,j)=sum(sum(abs(fk(i-7:i+7,j-7:j+7))));
end
end
Αρχείο Preprocess.m
function prepimg=preprocess(Image,d)
[m n]=size(Image);
prepimg=double(Image);
for j=1:d:m
if j+d-1>m
break;
end
for i=1:d:n
if i+d-1>n
break;
end
prepimg(j:j+d-1,i:i+d-1)=prepimg(j:j+d-1,i:i+d-1)- mean(mean(prepimg(j:j+d-1,i:i+d-1)));
end
end
Η εικόνα πάνω στην οποία πραγματοποιείται η επίδειξη των αλγορίθμων είναι το αρχείο “coins.png”. Στην αυθεντική της μορφή η εικόνα έχει ως εξής:
Στην οθόνη που ακολουθούν, επιστρέφεται το αποτέλεσμα της εικόνας που προκύπτει από την εφαρμογή του Law’s αλγόριθμου στο αρχικό αρχείο.