Sei sulla pagina 1di 16

Dtection par traitement dimage des places de stationnement vides dans un parking (application sur Matlab)

Contact : atef.habiby@gmail.com

Sommaire : Introduction gnrale3 Technique adopte.4 1re tape : segmentation de limage statique. 2me tape : partition de limage selon le nombre de places. 3me tape : calcul du nombre de blocs dans chaque espace. 4me tape : lAnalyse des rsultats. 5me tape : test de la robustesse de la solution. Conclusion13 Rfrences.16

Introduction gnrale :
Le contrle automatique de la disponibilit des cellules dans un Parking est une technique innovante qui joue un rle trs important dans la gestion des Parking et le guidage automatique des vhicules aux places vides. Lutilit de cette technique est surtout remarquable quand il sagit des Parking des grandes villes, des aroports ou ct des grandes surfaces commerciales. La gestion automatique dun Parking peut tre divise en deux catgories : la premire approche consiste estimer la charge totale du Parking en comptant le flux entrant et sortant des vhicules dans le Parking. Alors que la deuxime approche que nous allons adopter est dinformer le conducteur de la disponibilit de chaque cellule dans le Parking .Et donc, non pas seulement dterminer le nombre des places vides mais aussi de savoir quelles sont ces places vides. Plusieurs mthodes ont t utilises pour dterminer la disponibilit dune cellule dans un parking, on peut citer par exemple, lutilisation des capteurs ultrasoniques et magntiques ou lutilisation dune camra. Mais il savre que la premire technique des capteurs est trs coteuse : il faut un capteur pour chaque cellule du parking mais la deuxime solution ne ncessite quune camra qui couvre tout lespace du parking. Le traitement dimage en utilisant une camra de vido surveillance savre donc la solution optimale.

Technique adopte :
La mthode utilise est base sur le traitement des images statiques au niveau de gris, prises sur un intervalle de courte dure par une camra vido. En effet, on utilise une segmentation base des niveaux de gris de limage traite et les segments obtenus nous renseignent sur la prsence du vhicule.

1re tape : segmentation de limage statique


Pour implmenter la stratgie adopte, nous avons utilis la mthode de la segmentation en arbre quaternaire ( quadtree decomposition) en utilisant la fonction MATLAB dj implmente qtdecomp . Cette fonction permet de diviser une image, dans un premier lieu en quatre blocks de taille gales et de vrifier par suite si chacun des blocs rpond certaines critres dhomognit (par exemple si tous les pixels du block appartiennent un intervalle donn ) ; si ce critre est vrifi la dcomposition sarrte , sinon elle se rpte jusqu ce quon obtient le plus petit block qui rpond au critre prdfini. Ce processus est rpt dune manire itrative pour lensemble des blocks chacun part, comme le montre la figue 1 ci-dessous.

Figure 1 Pour notre cas, limage initiale tant la figure 2.a , lapplication de la fonction qtdecomp donne limage de la figure 2.b :

Figure 2.a
4

Figure 2.b

Le rsultat concide bel et bien avec ce qui a t prvu, car l o lespace est occup linhomognit des couleurs est leve et donc le nombre de blocs aussi. Cette fonction nous sera trs utile pour la faisabilit de la solution que nous proposerons, car il suffit de calculer le nombre de blocs forms au niveau de chaque espace et de le comparer avec un seuil pour savoir si lespace est occup par une voiture ou pas.

NB : limage de la figure 2.a doit tre une image carre pour ne pas engendrer des erreurs lors de lapplication 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,[])

2me tape : partition de limage selon le nombre de places


Maintenant que la segmentation est faite, il faut faire la partition de limage 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
6

La partition nest pas une tche facile et son laboration demande un travail considrable, car il faut dfinir exactement lemplacement en pixels de chaque espace, tout en ngligeant les espacements non utiles comme la voie qui spare les deux ranges. Le grand avantage de cette solution est que ce traitement ne se fait quune et une seule fois puisque langle de la camra reste fixe et les emplacements des espaces de stationnement sont dtermins une fois pour toute.

3me tape : calcul du nombre de blocs dans chaque espace.


Dans le script Matlab (voir lannexe), chacune de ces 32 zones sera traite sparment. C'est--dire quon va calculer le nombre de blocs forms 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 :

4me tape : lAnalyse des rsultats


Maintenant quon a la matrice, nous devons fixer un seuil au dessus duquel lespace est considr occup par une voiture et vis versa.
7

Avant de commencer chercher ce seuil, il est important de mettre laccent sur un dtail. Nous remarquons que, faute de la mauvaise qualit de limage, les voitures de couleur noir sont mal reprsentes dans la matrice, car elles apparaissent avec couleur presque unie et cela diminue linhomognit. Par exemple, si nous regardons de plus prs la matrice et nous la comparons limage initiale, nous remarquerons quil y a une petite aberration :

Figure 4

La voiture en haut droite doit normalement prsenter un nombre de blocs plus lev que lespace vide den bas et pourtant ce nest pas le cas. Mais ce problme naura jamais lieu dans la ralit car les camras utilises sont souvent de trs haute qualit.

Nanmoins, nous pouvons remdier ce problme en remplaant les voitures de couleur trs sombre par des voitures blanches comme le montre la figure suivante :

Figure 5

La matrice dans ce cas est la suivante :

Aprs plusieurs tests il a t dmontr que le seuil au dessus duquel lespace est considr plein sera : 250 blocs.

Dans ces conditions, le nombre de places vides est :

Le rsultat concide exactement avec la ralit !!

Ajoutons maintenant une voiture dans le parking et testons le code :

Nous avons ajout une voiture dans la 6me place de la deuxime range en haut. Ceci implique que le nouveau rsultat doit tre 13 places vides. Effectivement, le rsultat obtenu est le suivant :

Important : Localisation des places vides


Nous avons mis en place une matrice qui indique lemplacement des places vides, voir ci-dessous :
10

0 place vide. 1 place occupe.

5me tape : test de la robustesse de la solution


Pour tester la robustesse de la solution nous avons ajout deux lments limage : Un petit enfant. Une voiture sur la voie.

11

Figure 6 Le rsultat obtenu est le suivant :

Le nombre de places vides est rest le mme !!

Constat : La solution propose est bel et bien robuste et efficace.

12

Conclusion
La mthode reposant sur le traitement de limage statique prise par une camra vido sur un intervalle de courte dure a donn des rsultats trs satisfaisant et qui sadaptent aux changements. Son implmentation demeure plus ou moins facile car elle nexige une partition du parking que le premier jour de lutilisation. Pour couvrir un parking de taille plus large comme celui montr cidessous, nous pouvons exploiter la mme mthode, seul le nombre de places de stationnement augmentera.

Figure 7

13

Annexes:
Code Source Matlab
I=imread('park2.png'); figure,imshow(I) b=rgb2gray(I); %transforme limage en niveaux de gris figure,imshow(b) ss = qtdecomp(b,.3,[8 2]); %segmenter limage avec une prcision 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 rpartition de limage segmente en cellules, chacune dlimitant 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 forme 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 ladapter notre situation de telle sorte quil stocke dans une matrice tot le nombre de blocs forms 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 considre vide.

14

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 mme travail pour les deux ranges den bas car si nous ne pouvons pas les regrouper puisque a crera un decalage lors de la rpartition 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 rsultats matrice_des_nombres_de_block_dans_chaque_espace=tot nombre_de_places_vides =places_vides matrice_de_localisation=localisation

15

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.

16

Potrebbero piacerti anche