detector de placas para automoviles particulares

10

Click here to load reader

Upload: oscar-leonardo-mosquera-dussan

Post on 23-Jun-2015

2.865 views

Category:

Documents


0 download

DESCRIPTION

Aplicacion para detectar las placas o matriculas de los automoviles particulares, utilizando el software matlab, procesamiento digital de imagenes.

TRANSCRIPT

Page 1: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES EMPLEANDO EL SOFTWARE MATLAB

OSCAR LEONARDO MOSQUERA DUSSAN2005100830

PRESENTADO AL INGENIERO:JOSE SALGADO PATRON

UNIVERSIDAD SURCOLOMBIANAFACULTAD INGENIERIA

INGENIERIA ELECTRONICAAUTOMATIZACION II

NEIVA-HUILA2010

Page 2: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

OBJETIVOS

● Desarrollar un sistema en el software Matlab que permita identificar las placas de diferentes fotos de automóviles particulares.

● Detectar el 90% de las placas para un banco de 60 fotografías de distintos automóviles.● Desarrollar el sistema empleando los conocimientos adquiridos sobre imágenes RGB y

HSV.● Utilizar los metedos de segmentación basados en la Distancia Euclidiana y en la Distancia

Mahalanobis.

Page 3: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

PROCEDIMIENTO

Se realizaron dos códigos , uno para trabajar con imagen y muestras en formato RGB y otro para el formato HSV. Para lograr óptimos resultados se tomaron 100 muestras de las diferentes placas de automóviles particulares, tanto para el sistema en RGB como para el HSV. Cada código tiene la opción de elegir que técnica de segmentación se desea utilizar.(Euclidiana o Mahalanobis).

El Código empleado para tomar las muestras es el siguiente:

%muestras representativas :

IM=imread('mosaico.bmp');%se creo una imagen mosaico con las placas de diferentes automoviles, obteniendo un mosaico en %representacion RGB IM=rgb2hsv(IM);%y uno en HSV.figure,imshow(IM);title('mosaicoHSV');[nf nc c]=size(IM);

ROIH=[];for f=1:100 [x y]=ginput(1);%con ginput capturamos del mosaico las 100 muestras representativas para el

%sistema. x=round(x); y=round(y); color=[IM(y,x,1) IM(y,x,2) IM(y,x,3)]; ROIH=[ROIH; color];end;

ROIH=double(ROIH);R=1:100;R=[R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R; R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R; R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R;R; R;R;R;R;R;R;R;R;R;R;];figure,imshow(R,ROIH);title('Muestras Representativas');

Page 4: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

Una ves obtenidos las matrizes que contienen la informacion de las muestras representativas (ROI,ROIH) , se implemento el siguiente codigo:

%Representacion RGB.%adquirimos imagenclcIM=imread('1028.jpg');SELECT=input('RGB.segmentar=1.Euclidiana 2.Mahalanobis :');disp('Espere un momento porfavor, ...')figure;subplot(2,2,1);imshow(IM);title('Original');[nf nc c]=size(IM);

%Aplicamos Distancia:%ROI es la matriz de muestras.rgbmedio=[mean(ROI(:,1)); mean(ROI(:,2)); mean(ROI(:,3))];IM2=IM;MC=cov(ROI);MCi=inv(MC);MCi=MCi/max(max(MCi)); for f=1:nf for c=1:nc z=[IM(f,c,1); IM(f,c,2); IM(f,c,3)]; if SELECT==1 %Segun SELECT calcular distancia Euclidiana. d2=Deucl(z,rgbmedio); if d2>0.287 IM2(f,c,:)=[0 0 0]; else IM2(f,c,:)=[255 255 255]; end; else %segun SELECT,Calcular distancia Mahalanobis.

Page 5: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

d2=DMaha(z,rgbmedio,MCi); if d2>0.0369 %0.025 IM2(f,c,:)=[0 0 0]; else IM2(f,c,:)=[255 255 255]; end; end; end;end;IM2=rgb2gray(IM2);subplot(2,2,2);imshow(IM2);title('Segmentacion');

%con el fin de obtener una imagen mas “limpia” y reducir ruido.%dilatese=strel('diamond',3);%Definimos elemento estructuralIMD=imdilate(IM2,se);%llevamos acabo dilatacion.subplot(2,2,3);imshow(IMD);title('Dilatacion');IM4=IMD;

%binarisamos la imagen para continuar con el procesamiento , etiquetado de elementos%y extraccion de caracteristicas.for F=1:nf for C=1:nc if (IMD(F,C)==255) IM4(F,C)=1; else IM4(F,C)=0; end; end;end;

%etiquetar con bwlabel[IMT,NUM]=bwlabel(IM4);

%Extraemos caracteristicas que nos describan los objetos de la imagen%sacar ,area,centroide,boundinboxobjetos=regionprops(IMT,'Area','BoundingBox','Centroid');AreasMatriz=[];for O=1:NUM AreasMatriz=[AreasMatriz; objetos(O,1).Area];end AreaM=max(AreasMatriz);I=find(AreasMatriz==AreaM);%obtenemos el elemento con mayor area, el cual debe corresponder %con el elemento segmentado es decir la placa del automovil.

%Obtenemos la Localizacion (coordenadas x,x,width,height) del objeto para nuestro interes:placax=objetos(I,1).BoundingBox(1,1);placax=uint16(placax);placay=objetos(I,1).BoundingBox(1,2);placay=uint16(placay);placaw=objetos(I,1).BoundingBox(1,3);placah=objetos(I,1).BoundingBox(1,4);

Page 6: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

%Mediante el comando IMCROP presentamos en una imagen nueva unicamente el objeto de %nuestro interes, es decir la Placa del automovil.

C_PLACA=[placax placay placaw placah];%X,Y,W,H, vienen del bounding boxplacaf=imcrop(IM,C_PLACA);subplot(2,2,4);imshow(placaf);title('Placa')

De manera anolago, se realiza la implementacion del codigo para la representacion en HSV :

%adquirimos imagenclcIMo=imread('1046.jpg');IM=rgb2hsv(IMo);ROI=ROIH;SELECT=input('HSV.segmentar=1.Euclidiana 2.Mahalanobis :');disp('Espere un momento porfavor, ...')figure;subplot(2,2,1);imshow(IM);title('Original HSV');[nf nc c]=size(IM);

%Aplicamso Distancia:%ROI es la matriz de muestras.rgbmedio=[mean(ROI(:,1)); mean(ROI(:,2)); mean(ROI(:,3))];IM2=IM;MC=cov(ROI);MCi=inv(MC);MCi=MCi/max(max(MCi)); for f=1:nf for c=1:nc z=[IM(f,c,1); IM(f,c,2); IM(f,c,3)]; if SELECT==1 d2=Deucl(z,rgbmedio); if d2>0.0011 IM2(f,c,:)=[0 0 0]; else IM2(f,c,:)=[255 255 255]; end; else d2=DMaha(z,rgbmedio,MCi); if d2>0.0000001 IM2(f,c,:)=[0 0 0]; else IM2(f,c,:)=[255 255 255]; end; end; end;end;IM2=rgb2gray(IM2);subplot(2,2,2);imshow(IM2);title('Segmentacion');

Page 7: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

% Filtrar:%dilatese=strel('diamond',3);IMD=imdilate(IM2,se);subplot(2,2,3);imshow(IMD);title('Dilatacion');IM4=IMD;

%binarisarfor F=1:nf for C=1:nc if (IMD(F,C)>0) IM4(F,C)=1; else IM4(F,C)=0; end; end;end;

%etiquetar con bwlabel[IMT,NUM]=bwlabel(IM4);

%sacar ,area,centroide,boundinboxobjetos=regionprops(IMT,'Area','BoundingBox','Centroid');AreasMatriz=[];for O=1:NUM AreasMatriz=[AreasMatriz; objetos(O,1).Area];end AreaM=max(AreasMatriz);I=find(AreasMatriz==AreaM);

%Sacamos Coordenadasplacax=objetos(I,1).BoundingBox(1,1);placax=uint16(placax);placay=objetos(I,1).BoundingBox(1,2);placay=uint16(placay);placaw=objetos(I,1).BoundingBox(1,3);placah=objetos(I,1).BoundingBox(1,4);

%Extraer placaC_PLACA=[placax placay placaw placah];%X,Y,W,H, vienen del bounding boxplacaf=imcrop(IMo,C_PLACA);subplot(2,2,4);imshow(placaf);title('Placa')

Page 8: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

RESULTADOS

Resultado obtenido , representación RGB, Distancia euclidiana:

Representación HSV, Distancia euclidiana:

Page 9: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

Representación RGB, Distancia Mahalanobis:.

Representación HSV, Distancia Mahalanobis, ajuste de la distancia umbral para lograr mejores resultados:

Page 10: DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

CONCLUSIONES

● El numero de muestras representativas es un parámetro de gran importancia en el procesamiento de la imagen, ya que en gran parte de este depende el lograr una buena segmentación. Se debe considerar una cantidad de muestras aceptable y que no represente un coste computacional excesivo.

● La distancia Umbral es un parámetro de gran importancia en el proceso de la segmentación del objeto de nuestro interés, se debe realizar un ajuste para obtener el umbral óptimo que funcione con el +90% de las placas de automóviles.

● El sistema tiene una efectividad superior al 90%, en un caso puntuales como el observado en el resultado 2, se observa que se detecta además de la placa un segmento adicional de información perteneciente al automóvil, mediante un ajuste de la distancia se puede lograr una mejora.

● Los algoritmos para segmentación empleando Distancia Euclidiana y Mahalanobis, tienen un tiempo considerable, esto debido al tipo de operaciones que efectúan estos algoritmos (multiplicación,radicación, etc).