function mat_directions=gradient_direction( matrice ) % GRADIENT_DIRECTIONS prend une matrice et rend une matrice des % directions, ou le gradient a le valeur le plus grand % 0->0 degres 1->45 degres 2->90 degres ... % Masques pour calculer le gradient a un point donne % Ces masques sont d'apres Freeman % gra0 correspond a 0 degrees, gra1 a 45 degrees ... gra0 = [-1 1 1 -1 -2 1 -1 1 1]; gra1 = [1 1 1 -1 -2 1 -1 -1 1]; gra2 = [1 1 1 1 -2 1 -1 -1 -1]; gra3 = [1 1 1 1 -2 -1 1 -1 -1]; gra4 = gra2'; gra5 = gra1'; gra6 = gra0'; gra7 = [-1 -1 1 -1 -2 1 1 1 1]; I0 = conv2( matrice, gra0, 'valid' ); I1 = conv2( matrice, gra1, 'valid' ); I2 = conv2( matrice, gra2, 'valid' ); I3 = conv2( matrice, gra3, 'valid' ); I4 = conv2( matrice, gra4, 'valid' ); I5 = conv2( matrice, gra5, 'valid' ); I6 = conv2( matrice, gra6, 'valid' ); I7 = conv2( matrice, gra7, 'valid' ); mat_directions = I0; [m,n] = size( mat_directions ); for ( i = 1:m ) for ( j = 1:n ) max = I0(i,j); dirmax = 0; gij = I1(i,j); if ( gij > max ) max = gij; dirmax = 1; end; gij = I2(i,j); if ( gij > max ) max = gij; dirmax = 2; end; gij = I3(i,j); if ( gij > max ) max = gij; dirmax = 3; end; gij = I4(i,j); if ( gij > max ) max = gij; dirmax = 4; end; gij = I5(i,j); if ( gij > max ) max = gij; dirmax = 5; end; gij = I6(i,j); if ( gij > max ) max = gij; dirmax = 6; end; gij = I7(i,j); if ( gij > max ) max = gij; dirmax = 7; end; mat_directions(i,j) = dirmax; end; end; end