87 lines
2.2 KiB
Mathematica
87 lines
2.2 KiB
Mathematica
|
clear;
|
||
|
close all;
|
||
|
taille_ecran = get(0,'ScreenSize');
|
||
|
L = taille_ecran(3);
|
||
|
H = taille_ecran(4);
|
||
|
|
||
|
% Parametres :
|
||
|
alpha = pi/180*12; % Seuil sur l'orientation du gradient (en radians)
|
||
|
cos_alpha = cos(alpha);
|
||
|
seuil_norme = 2/sin(alpha); % Seuil sur la norme du gradient (decoule d'une etude theorique)
|
||
|
|
||
|
% Chargement des donnees :
|
||
|
% load Donnees/parquet;
|
||
|
%load Donnees/parquet;
|
||
|
load Donnees/bateau;
|
||
|
[n_lignes,n_colonnes] = size(I);
|
||
|
limites_affichages = [1 n_colonnes 1 n_lignes];
|
||
|
|
||
|
figure('Name','Detection des alignements','Position',[0.2*L,0,0.8*L,H]);
|
||
|
|
||
|
% Affichage de l'image :
|
||
|
subplot(2,2,1);
|
||
|
imagesc(I);
|
||
|
axis equal;
|
||
|
axis off;
|
||
|
colormap gray;
|
||
|
title('Image originale','FontSize',30);
|
||
|
axis(limites_affichages);
|
||
|
|
||
|
% Fenetre d'affichage des pixels de contour :
|
||
|
subplot(2,2,3);
|
||
|
imagesc(I);
|
||
|
axis equal;
|
||
|
axis off;
|
||
|
colormap gray;
|
||
|
hold on;
|
||
|
|
||
|
% Gradient du niveau de gris (x vers la droite, y vers le bas) :
|
||
|
I = double(I);
|
||
|
[G_x,G_y] = gradient(I);
|
||
|
G_norme = sqrt(G_x.^2+G_y.^2);
|
||
|
|
||
|
% Selection des pixels de contour :
|
||
|
contour = G_norme>seuil_norme;
|
||
|
|
||
|
% Pas de pixel de contour sur le bord de l'image => Traitement simplifie !
|
||
|
contour([1 n_lignes],:) = 0;
|
||
|
contour(:,[1 n_colonnes]) = 0;
|
||
|
|
||
|
% Tri des pixels de contour :
|
||
|
indices_contour = find(contour);
|
||
|
[~,indices] = sort(G_norme(indices_contour),'descend');
|
||
|
indices_contour = indices_contour(indices);
|
||
|
|
||
|
% Affichage d'une petite fleche sur les pixels de contour :
|
||
|
[i,j] = ind2sub(size(I),indices_contour);
|
||
|
quiver(j,i,G_x(indices_contour),G_y(indices_contour),'r'); % Attention : x = j et y = i
|
||
|
axis equal;
|
||
|
title('Pixels de contour','FontSize',30);
|
||
|
axis(limites_affichages);
|
||
|
drawnow;
|
||
|
|
||
|
% Affichage des ensembles E (la fonction label2rgb donne a chaque ensemble E une couleur differente) :
|
||
|
subplot(2,2,2);
|
||
|
imagesc(I_resultat);
|
||
|
axis(limites_affichages);
|
||
|
axis equal;
|
||
|
axis off;
|
||
|
title('Ensembles candidats','FontSize',30);
|
||
|
|
||
|
% Affichage de l'esquisse :
|
||
|
subplot(2,2,4);
|
||
|
imagesc(120*ones(size(I)),[0,255]);
|
||
|
axis equal;
|
||
|
axis off;
|
||
|
title('Alignements','FontSize',30);
|
||
|
hold on;
|
||
|
axis(limites_affichages);
|
||
|
|
||
|
% Boucle sur les ensembles E :
|
||
|
for k = 1:size(extremites,3)
|
||
|
% Affichage du segment :
|
||
|
line(extremites(1,:,k),extremites(2,:,k),'Color','w','LineWidth',2);
|
||
|
end
|
||
|
|
||
|
save exercice_0;
|