1
Détection par traitement d’image des
places de stationnement vides dans un
parking
(application sur Matlab)
Contact : [email protected]
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
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.
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
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,[])
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
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.
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 :
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é !!
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 :
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.
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.
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
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.
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
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.