Bonjour,
je viens de terminer un code qui calcule le flux optique en utilisant la méthode de Lucas-Kanade, j'ai utilisé l'algorithme expliqué dans le help du Matlab sous le titre "vision.OpticalFlow System object"
voici mon code :
J'ai plusieurs questions:
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 % Convert to grayscale I = rgb2gray(firstFrame); J = rgb2gray(secondFrame); % convert to double I = double(I); J = double(J); % compute Ix,Iy,It H=(1/12)*[-1 8 0 -8 1]; Ix = imfilter(I,H,'replicate'); Iy = imfilter(I,H','replicate'); It=I-J; %smooth the Ix Iy and It S=(1/16)*[1 4 6 4 1]; Ix_m = imfilter(Ix,S,'replicate'); Iy_m = imfilter(Iy,S,'replicate'); It_m = imfilter(It,S,'replicate'); % window size w=10; % initialize velocity vectors u = zeros(height,width); v = zeros(height,width); % compute the velocity vectors for i=11:height-10 for j=11:width-10 Ix = Ix_m(i-w:i+w, j-w:j+w); Iy = Iy_m(i-w:i+w, j-w:j+w); It = It_m(i-w:i+w, j-w:j+w); Ix = Ix(:); Iy = Iy(:); b = -It(:); A = [Ix Iy]; d = pinv(A)*b; u(i,j)=d(1); v(i,j)=d(2); end end % Draw the optical flow vectors figure(1); %II = imcrop(I,[21 21 width-20 height-20]); imshow(uint8(I)); hold on; quiver(u,v, 1,'r')
premièrement est ce que mon code est correcte?
deuxièmement comment faire pour afficher que les vecteurs non nulle sur l'image de résultat?
troisièmement comment faire pour améliorer les résultats?
quatrièmement dans le 'help' de Matlab il compare les valeurs propres de la matrice A'A a un seuil comment fixer ce seuil
dans le deuxième cas des valeurs propres je ne comprends pas comment normalisée le flux optique (voir l'aide du matlab attaché)
dernièrement est ce que l'utilisation des méthodes de détection des bordure ou les coins (corners) est pour éviter de tomber dans le deuxièmement et le troisième cas des valeurs propres
Merci pour votre aide
Partager