P. 1
DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

DETECTOR DE PLACAS PARA AUTOMOVILES PARTICULARES

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

More info:

Published by: Oscar Leonardo Mosquera Dussan on Sep 10, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/31/2013

pdf

text

original

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 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.

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');

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 , representación RGB, Distancia euclidiana:

Representación HSV, Distancia euclidiana:

Representación RGB, Distancia Mahalanobis: .

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

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).

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->