16
1 Détection par traitement d’image des places de stationnement vides dans un parking (application sur Matlab) Contact : [email protected]

Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

  • Upload
    greento

  • View
    380

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

1

Détection par traitement d’image des

places de stationnement vides dans un

parking

(application sur Matlab)

Contact : [email protected]

Page 2: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

2

Sommaire :

Introduction générale……………………………………………………3

Technique adoptée……………………………………………………….4

1ère

étape : segmentation de l’image statique.

2ème

étape : partition de l’image selon le nombre de places.

3ème

étape : calcul du nombre de blocs dans chaque espace.

4ème

étape : l’Analyse des résultats.

5ème

étape : test de la robustesse de la solution.

Conclusion………………………………………………………………13

Références……………………………………………………………….16

Page 3: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

3

Introduction générale :

Le contrôle automatique de la disponibilité des cellules dans un Parking

est une technique innovante qui joue un rôle très important dans la gestion des

Parking et le guidage automatique des véhicules aux places vides. L’utilité de

cette technique est surtout remarquable quand il s’agit des Parking des grandes

villes, des aéroports ou à côté des grandes surfaces commerciales.

La gestion automatique d’un Parking peut être divisée en deux catégories :

la première approche consiste à estimer la charge totale du Parking en comptant

le flux entrant et sortant des véhicules dans le Parking. Alors que la deuxième

approche que nous allons adopter est d’informer le conducteur de la

disponibilité de chaque cellule dans le Parking .Et donc, non pas seulement

déterminer le nombre des places vides mais aussi de savoir quelles sont ces

places vides.

Plusieurs méthodes ont été utilisées pour déterminer la disponibilité d’une

cellule dans un parking, on peut citer par exemple, l’utilisation des capteurs

ultrasoniques et magnétiques ou l’utilisation d’une caméra. Mais il s’avère que

la première technique des capteurs est très coûteuse : il faut un capteur pour

chaque cellule du parking mais la deuxième solution ne nécessite qu’une caméra

qui couvre tout l’espace du parking.

Le traitement d’image en utilisant une caméra de vidéo surveillance

s’avère donc la solution optimale.

Technique adoptée :

La méthode utilisée est basée sur le traitement des images statiques au

niveau de gris, prises sur un intervalle de courte durée par une caméra vidéo. En

effet, on utilise une segmentation à base des niveaux de gris de l’image traitée et

les segments obtenus nous renseignent sur la présence du véhicule.

Page 4: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

4

1ère étape : segmentation de l’image statique

Pour implémenter la stratégie adoptée, nous avons utilisé la méthode de la

segmentation en arbre quaternaire ( quadtree decomposition) en utilisant la

fonction MATLAB déjà implémentée « qtdecomp » . Cette fonction permet de

diviser une image, dans un premier lieu en quatre blocks de taille égales et de

vérifier par suite si chacun des blocs répond à certaines critères d’homogénéité

(par exemple si tous les pixels du block appartiennent à un intervalle donné ) ; si

ce critère est vérifié la décomposition s’arrête , sinon elle se répète jusqu’à ce

qu’on obtient le plus petit block qui répond au critère prédéfini. Ce processus est

répété d’une manière itérative pour l’ensemble des blocks chacun à part, comme

le montre la figue 1 ci-dessous.

Figure 1

Pour notre cas, l’image initiale étant la figure 2.a , l’application de la

fonction « qtdecomp » donne l’image de la figure 2.b :

Figure 2.a Figure 2.b

Page 5: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

5

Le résultat coïncide bel et bien avec ce qui a été prévu, car là où l’espace

est occupé l’inhomogénéité des couleurs est élevée et donc le nombre de blocs

aussi.

Cette fonction nous sera très utile pour la faisabilité de la solution que

nous proposerons, car il suffit de calculer le nombre de blocs formés au niveau

de chaque espace et de le comparer avec un seuil pour savoir si l’espace est

occupé par une voiture ou pas.

NB : l’image de la figure 2.a doit être une image carrée pour ne pas engendrer

des erreurs lors de l’application de la fonction « qtdecomp ».

Code matlab :

I = imread('park1.png');

b=rgb2gray(I);

S = qtdecomp(b,.3,[8 2]);

blocks = repmat(uint8(0),size(S));

for dim = [512 256 128 64 32 16 8 4 2 1];

numblocks = length(find(S==dim));

if (numblocks > 0)

values = repmat(uint8(1),[dim dim numblocks]);

values(2:dim,2:dim,:) = 0;

blocks = qtsetblk(blocks,S,dim,values);

end

end

blocks(end,1:end) = 1;

blocks(1:end,end) = 1;

imshow(I), figure, imshow(blocks,[])

Page 6: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

6

2ème étape : partition de l’image selon le

nombre de places

Maintenant que la segmentation est faite, il faut faire la partition de

l’image en 32 zones distinctes, comme il est montré sur les deux figures 3.a et

3.b ci-dessous :

Figure 3.a

Figure 3.b

Page 7: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

7

La partition n’est pas une tâche facile et son élaboration demande un

travail considérable, car il faut définir exactement l’emplacement en pixels de

chaque espace, tout en négligeant les espacements non utiles comme la voie qui

sépare les deux rangées.

Le grand avantage de cette solution est que ce traitement ne se fait qu’une

et une seule fois puisque l’angle de la caméra reste fixe et les emplacements des

espaces de stationnement sont déterminés une fois pour toute.

3ème étape : calcul du nombre de blocs dans

chaque espace.

Dans le script Matlab (voir l’annexe), chacune de ces 32 zones sera traitée

séparément. C'est-à-dire qu’on va calculer le nombre de blocs formés au niveau

de chaque espace de stationnement et on va le stocker dans une matrice de taille

4x8.

Dans notre cas la matrice obtenue est la suivante :

4ème étape : l’Analyse des résultats

Maintenant qu’on a la matrice, nous devons fixer un seuil au dessus

duquel l’espace est considéré occupé par une voiture et vis versa.

Page 8: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

8

Avant de commencer à chercher ce seuil, il est important de mettre

l’accent sur un détail. Nous remarquons que, faute de la mauvaise qualité de

l’image, les voitures de couleur noir sont mal représentées dans la matrice, car

elles apparaissent avec couleur presque unie et cela diminue l’inhomogénéité.

Par exemple, si nous regardons de plus près la matrice et nous la

comparons à l’image initiale, nous remarquerons qu’il y a une petite aberration :

Figure 4

La voiture en haut à droite doit normalement présenter un nombre de

blocs plus élevé que l’espace vide d’en bas et pourtant ce n’est pas le cas.

Mais ce problème n’aura jamais lieu dans la réalité car les caméras

utilisées sont souvent de très haute qualité.

Néanmoins, nous pouvons remédier à ce problème en remplaçant les

voitures de couleur très sombre par des voitures blanches comme le montre la

figure suivante :

Page 9: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

9

Figure 5

La matrice dans ce cas est la suivante :

Après plusieurs tests il a été démontré que le seuil au dessus duquel

l’espace est considéré plein sera : 250 blocs.

Dans ces conditions, le nombre de places vides est :

Le résultat coïncide exactement avec la réalité !!

Page 10: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

10

Ajoutons maintenant une voiture dans le parking

et testons le code :

Nous avons ajouté une voiture dans la 6ème

place de la deuxième rangée en haut.

Ceci implique que le nouveau résultat doit être 13 places vides.

Effectivement, le résultat obtenu est le suivant :

Important : Localisation des places vides

Nous avons mis en place une matrice qui indique l’emplacement des places

vides, voir ci-dessous :

Page 11: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

11

0 place vide.

1 place occupée.

5ème étape : test de la robustesse de la

solution

Pour tester la robustesse de la solution nous avons ajouté deux éléments à

l’image :

Un petit enfant.

Une voiture sur la voie.

Page 12: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

12

Figure 6

Le résultat obtenu est le suivant :

Le nombre de places vides est resté le même !!

Constat :

La solution proposée est bel et bien robuste et efficace.

Page 13: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

13

Conclusion

La méthode reposant sur le traitement de l’image statique prise par une

caméra vidéo sur un intervalle de courte durée a donné des résultats très

satisfaisant et qui s’adaptent aux changements.

Son implémentation demeure plus ou moins facile car elle n’exige une

partition du parking que le premier jour de l’utilisation.

Pour couvrir un parking de taille plus large comme celui montré ci-

dessous, nous pouvons exploiter la même méthode, seul le nombre de places de

stationnement augmentera.

Figure 7

Page 14: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

14

Annexes:

Code Source Matlab

I=imread('park2.png'); figure,imshow(I) b=rgb2gray(I); %transforme l’image en niveaux de gris figure,imshow(b)

ss = qtdecomp(b,.3,[8 2]); %segmenter l’image avec une précision de 0.3 de

telle sorte que le bloc maximal soit de taille 8x8 pixels et le bloc

minimal soit de taille 2x2.

%faire la répartition de l’image segmentée en cellules, chacune délimitant

une place dans le parking cc1=mat2cell(ss(1:140,31:376), [70 70], [43 43 43 43 43 43 44 44]); cc2=mat2cell(ss(220:376,10:376), [79 78], [48 47 47 47 47 47 45 39]);

blocks1 = repmat(uint8(0),size(cc1)); blocks2 = repmat(uint8(0),size(cc2));

places_vides=0; tot=zeros(4,8); %la matrice donnant le nombre de blocs dans chaque cellule. localisation=zeros(4,8); % matrice formée de 1 et 0 pour indiquer la

localisation des places vides.

%utiliser la fonction de matlab qui calcule le nombre de blocs dans une

image et l’adapter à notre situation de telle sorte qu’il stocke dans une

matrice tot le nombre de blocs formés dans chaque cellule.

for i=1:2 for j=1:8

for dim = [512 256 128 64 32 16 8 4 2 1]; numblocks = length(find(cc1{i,j}==dim)); tot(i,j) = numblocks+tot(i,j); if (numblocks > 0) values = repmat(uint8(1),[dim dim numblocks]); values(2:dim,2:dim,:) = 0; blocks1 = qtsetblk(blocks1,cc1{i,j},dim,values);

end end if(tot(i,j)<250) % si la valeur est en dessous de 250 la place est

considérée vide.

Page 15: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

15

places_vides=places_vides+1; %calcul le nombre de places vides. localisation(i,j)=0; else if (tot(i,j)>250) localisation(i,j)=1; end end end end

% on refait le même travail pour les deux rangées d’en bas car si nous ne

pouvons pas les regrouper puisque ça créera un decalage lors de la

répartition en cellules.

for i=3:4 for j=1:8

for dim = [512 256 128 64 32 16 8 4 2 1]; numblocks = length(find(cc2{i-2,j}==dim)); tot(i,j) = numblocks+tot(i,j); if (numblocks > 0) values = repmat(uint8(1),[dim dim numblocks]); values(2:dim,2:dim,:) = 0; blocks2 = qtsetblk(blocks2,cc2{i-2,j},dim,values);

end end if(tot(i,j)<250) places_vides=places_vides+1; localisation(i,j)=0; else if (tot(i,j)>250) localisation(i,j)=1; end end end end

%affichage des résultats matrice_des_nombres_de_block_dans_chaque_espace=tot nombre_de_places_vides =places_vides matrice_de_localisation=localisation

Page 16: Détection par traitement d’image des places de stationnement vides dans un parking(application sur Matlab)

16

References

[1] Abbas Saliimi B. Lokman, Fazli Aidee B. Omar, Universiti Malaysia

Pahang, Identifying Vacant Space of Parking Area Based on Image

Processing using Segmentation Technique.

[2] Siming Liu , Boston University, ROBUST VEHICLE DETECTION

FROM PARKING LOT IMAGES.