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);
Partager