J'ai implemente cette formule:

http://en.wikipedia.org/wiki/Mahalanobis_distance


Le script fait le calcul de la distance Mahalanobis d'une image
%Script mahpoza.m

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
clc %sterg ecranul consolei
clear all; %sterg toate variabilele pt.a nu exista confuzii
close all; %inchid toate figurile deschise cu grafice sau imagini pt.a nu exista confuzii la imagini
 
%M =[1 2 3; 2 7 5; 3 5 8]; %definirea matricei M 
 
M= imread('55.jpg'); %citesc matricea 100*100 asociata imaginii rgb
 
%%disp(I);
%M=rgb2gray(I);imshow(M);
 
 
M=double(M); %conversie in double a matricii double array  help-ul functiei cov permite doar folosirea variabilelor double
S=cov(M); %calcul matrice covarianta S pt.matricea initiala M
disp(S);
 
V = M(1:100*100) %matricea N*N unde N=100 o transform in vector N*N*1
 
disp('Valorea medie pentru vectorul V');
mean(V) %calcul valoare medie pt.vectorul de forma N*N*1
disp('Matricea de covarianta asociata matricii M:');
 
 
 
T=abs(inv(S));
disp('Inversa matricii de covarianta S');
disp(T);
 
% Implementarea formulei Mahalanobis pt. matricea initiala data M
 
x=V'; %parametru formula Mahalanobis
 
disp('Vectorul transpus este');
disp(x);
 
 
miu=mean(V'); %parametru formula Mahalanobis
 
disp('Calculul valorii medii pentru vectorul V transpus')
disp(miu);
 
 
%Formula pentru calculul distantei Mahalanobis -aici e problema
 
%Transformam matricea T(3*3) intr-un vector V1 3*3*1
 
V1=T(1:100*100);
 
disp('Transformarea inversei matricii de covarianta in vector');
disp(V1);
 
 
distmaha=sqrt((x-miu)'*V1'*(x-miu));
 
disp('Distanta Mahalanobis pentru matricea initiala este');
disp(distmaha);
 
index = find( distmaha == real(distmaha) );
dataOut = distmaha( index); 
disp(dataOut);
 
 
y=mean(distmaha);
disp(y);
result=real(y);
disp(result);