next up previous
Next: lin_sym.m: Computes the linear Up: Matlab functions Previous: adjust.m: Computes the linear

gradient_direction.m: Uses 8 different gradient masks to calculate the approximate gradient direction

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



Adrian Perrig
Wed Jun 5 22:28:55 MET DST 1996