2011-04-04 13 views
6

Tengo una imagen de matrícula en blanco y negro.dígitos del segmento en una imagen - Matlab

esto es como se ve:

enter image description here

ahora quiero colorear el fondo de cada dígito, para futuros trabajos de corte los números de la placa.

como esto:

enter image description here

será muy apreciada ninguna ayuda.

+0

¿Sugerir un título cambiar - "dígitos de un segmento en una imagen"? –

Respuesta

7

Una forma simple de generar sus cuadros es a sum su imagen en cada columna y buscar donde la suma cae por debajo de algún umbral (es decir, donde los píxeles blancos caen debajo de un número dado en esa columna). Esto le dará índices de columna para dónde deberían estar las casillas. El ancho de estos cuadros puede ser demasiado estrecho (es decir, pequeñas partes de los números pueden sobresalir por los lados), por lo que puede dilatar los bordes convolving el vector de índice con un pequeño vector de unos y buscar los valores resultantes que son mayores que cero. He aquí un ejemplo el uso de su imagen de arriba:

rawImage = imread('license_plate.jpg'); %# Load the image 
maxValue = double(max(rawImage(:)));  %# Find the maximum pixel value 
N = 35;         %# Threshold number of white pixels 
boxIndex = sum(rawImage) < N*maxValue; %# Find columns with fewer white pixels 
boxImage = rawImage;      %# Initialize the box image 
boxImage(:,boxIndex) = 0;    %# Set the indexed columns to 0 (black) 
dilatedIndex = conv(double(boxIndex),ones(1,5),'same') > 0; %# Dilate the index 
dilatedImage = rawImage;     %# Initialize the dilated box image 
dilatedImage(:,dilatedIndex) = 0;  %# Set the indexed columns to 0 (black) 

%# Display the results: 
subplot(3,1,1); 
imshow(rawImage); 
title('Raw image'); 
subplot(3,1,2); 
imshow(boxImage); 
title('Boxes placed over numbers'); 
subplot(3,1,3); 
imshow(dilatedImage); 
title('Dilated boxes placed over numbers'); 

enter image description here

Nota: El umbral hecho anterior da cuenta de la posibilidad de que la imagen en blanco y negro puede ser de tipo doble (con valores de cualquiera 0 o 1), lógico (también con valores de 0 o 1) o un entero de 8 bits sin signo (con valores de 0 o 255). Todo lo que tiene que hacer es establecer N en la cantidad de píxeles blancos para usar como umbral para identificar una columna que contiene parte de un número.

+0

@gnovice gracias por su respuesta, pero no funcionó. lo que obtengo es una nueva figura con solo títulos. ¿alguna sugerencia? –

+0

@Michael: ¿Funciona si usa la misma imagen de su publicación (es decir, haga clic con el botón derecho, guárdela, luego cárguela y procese)? – gnovice

+0

@gnovice tienes razón. cómo puedo hacer que sea universal para que coincida con todas las imágenes. si es posible ... –

0

Asumiendo que tiene la caja que rodea las letras - que le da el ángulo global

colapsar la imagen hacia abajo en 1d (puede ayudar a girar primero por lo que el cuadro delimitador es horizontal)

A continuación, busque los huecos entre las letras en esta firma en 1d que le dan las posiciones de los dígitos. Ayuda si conoce la cantidad de dígitos y el formato de las placas.

Cuestiones relacionadas