2012-07-02 16 views
5

Estoy intentando detectar texto de una imagen de entrada usando openCV. Para eso necesito eliminar los componentes de ruido de la imagen. El criterio para lo que estoy usando es que si el conteo de píxeles de cierto componente es menor a las 15 am, se elimina ese componente en particular.Eliminación de píxeles ruidosos usando opencv

por ejemplo, supongamos que las imágenes dadas a continuación se proporcionan como i/p para la función: input image 1

Input image 2

Como se puede observar tanto las imágenes contienen una gran cantidad de píxeles de ruido no deseados, especialmente el primero uno.

Así que si alguien puede sugerir una forma factible de lograrlo, sería muy apreciado.

+0

El texto también se parece a ruido. Consulte "Aprender de los datos" en la primera imagen. –

+0

sí, lo sé. Que "Aprender de los datos" en realidad no es necesario también. Es solo el color del borde exterior. En etapas posteriores, se puede obtener el color sólido lleno de "Aprender de los datos". Entonces, por el momento, esa pieza de texto en particular también se puede considerar como ruido. De hecho, en la primera imagen más o menos todo debe ser eliminado. En el segundo caso, el "aprendizaje a partir de datos" horizontal es útil y se ajusta a nuestros requisitos. – Koustav

+0

erosión o dilatación, apertura, cierre? ¿Has probado alguno de esos? –

Respuesta

2

Ok, lo siento, pero esto no es en c y su uso no opencv, sin embargo estoy seguro de etiquetado debe ser posible en opencv, simplemente no he usado todavía ... así que esto podría ayudar a ... básicamente, la idea es:

  1. Buscar, y etiquetar todas las manchas separadas en la imagen
  2. Eliminar todas las gotas que caen fuera de ciertas limitaciones (tamaño, forma)

Aquí implementar esto en python nosotros ing scipy, pero solo para el tamaño (no forma, aunque esto es fácil y eliminaría las líneas finas y largas en la primera imagen a continuación). Para que esto funcione, debemos conocer un rango aceptable de tamaños para las letras; sin embargo, puede determinarlo después de etiquetarlo al observar el tamaño promedio de la gota. Puede obtener falsos positivos del tamaño de una carta, pero posiblemente podrían eliminarse al observar que caer fuera de una cierta área de manchas concentradas (ya que el texto es espacialmente regular) ... También la longitud mínima de la oración podría ser una restricción poderosa.

De todos modos, código:

import scipy 
from scipy import ndimage 

im = scipy.misc.imread('learning2.png',flatten=1) 
#threshold image, so its binary, then invert (`label` needs this): 
im[im>100]=255 
im[im<=100]=0 
im = 255 - im 
#label the image: 
blobs, number_of_blobs = ndimage.label(im) 
#remove all labelled blobs that are outside of our size constraints: 
for i in xrange(number_of_blobs): 
    if blobs[blobs==i].size < 40 or blobs[blobs==i].size>150: 
     im[blobs==i] = 0 
scipy.misc.imsave('out.png', im) 

resultados:

enter image description here enter image description here

Cuestiones relacionadas