Está en la página 1de 10

DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES EMPLEANDO EL SOFTWARE MATLAB

OSCAR LEONARDO MOSQUERA DUSSAN 2005100830

PRESENTADO AL INGENIERO: JOSE SALGADO PATRON

UNIVERSIDAD SURCOLOMBIANA FACULTAD INGENIERIA INGENIERIA ELECTRONICA AUTOMATIZACION II NEIVA-HUILA 2010

OBJETIVOS

Desarrollar un sistema en el software Matlab que permita identificar las placas de diferentes fotos de automviles particulares. Detectar el 90% de las placas para un banco de 60 fotografas de distintos automviles. Desarrollar el sistema empleando los conocimientos adquiridos sobre imgenes RGB y HSV. Utilizar los metedos de segmentacin basados en la Distancia Euclidiana y en la Distancia Mahalanobis.

PROCEDIMIENTO Se realizaron dos cdigos , 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 automviles particulares, tanto para el sistema en RGB como para el HSV. Cada cdigo tiene la opcin de elegir que tcnica de segmentacin se desea utilizar.(Euclidiana o Mahalanobis). El Cdigo 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');

Una ves obtenidos las matrizes que contienen la informacion de las muestras representativas (ROI,ROIH) , se implemento el siguiente codigo: %Representacion RGB. %adquirimos imagen clc IM=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.

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. %dilate se=strel('diamond',3);%Definimos elemento estructural IMD=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,boundinbox objetos=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);

%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 box placaf=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 imagen clc IMo=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');

% Filtrar: %dilate se=strel('diamond',3); IMD=imdilate(IM2,se); subplot(2,2,3);imshow(IMD);title('Dilatacion'); IM4=IMD; %binarisar for 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,boundinbox objetos=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 Coordenadas 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); %Extraer placa C_PLACA=[placax placay placaw placah];%X,Y,W,H, vienen del bounding box placaf=imcrop(IMo,C_PLACA); subplot(2,2,4);imshow(placaf);title('Placa')

RESULTADOS Resultado obtenido , representacin RGB, Distancia euclidiana:

Representacin HSV, Distancia euclidiana:

Representacin RGB, Distancia Mahalanobis: .

Representacin HSV, Distancia Mahalanobis, ajuste de la distancia umbral para lograr mejores resultados:

CONCLUSIONES El numero de muestras representativas es un parmetro de gran importancia en el procesamiento de la imagen, ya que en gran parte de este depende el lograr una buena segmentacin. Se debe considerar una cantidad de muestras aceptable y que no represente un coste computacional excesivo. La distancia Umbral es un parmetro de gran importancia en el proceso de la segmentacin del objeto de nuestro inters, se debe realizar un ajuste para obtener el umbral ptimo que funcione con el +90% de las placas de automviles. El sistema tiene una efectividad superior al 90%, en un caso puntuales como el observado en el resultado 2, se observa que se detecta adems de la placa un segmento adicional de informacin perteneciente al automvil, mediante un ajuste de la distancia se puede lograr una mejora. Los algoritmos para segmentacin empleando Distancia Euclidiana y Mahalanobis, tienen un tiempo considerable, esto debido al tipo de operaciones que efectan estos algoritmos (multiplicacin,radicacin, etc).

También podría gustarte