2011-01-10 16 views
9

OpenCV tiene una práctica función cvEqualizeHist() que funciona muy bien en imágenes desvanecidas/de bajo contraste. Sin embargo, cuando se da una imagen de alto contraste, el resultado es de bajo contraste. Tengo la razón: el histograma se distribuye de manera uniforme y esas cosas.Determine si una imagen necesita un contraste automático en OpenCV

La pregunta es: ¿cómo puedo saber la diferencia entre una imagen de bajo contraste y una de alto contraste?

Estoy trabajando en imágenes en escala de grises y estableciendo su contraste de forma adecuada para que el umbralizarlas no elimine el texto que debo extraer (esa es una historia diferente). Sugerencias bienvenidas: especialmente sobre cómo saber si la mayoría de los píxeles de la imagen son de color gris claro (lo que significa que se debe realizar la ecualización histórica) ¡Ayuda!

EDIT: gracias a todos por las numerosas respuestas informativas. Pero el cálculo de la desviación estándar fue suficiente para mis requisitos y, por lo tanto, lo tomo como la respuesta a mi consulta.

+0

Necesito calcular el contraste de una imagen. Lo hice calcificando "meanStdDev" de una imagen. ¿Estoy en lo cierto? A veces obtengo el valor de SD Más de 100. ¿Cuál sería el umbral para un buen Contraste? Y cuál es el rango de SD para convertirlo en una escala de 100. – 2vision2

+0

bien divida SD por 255, ya que el valor de un píxel, suponiendo una imagen de 8 bits, no puede ser más que eso. luego multiplique por su escala adecuada, p. 100. esto se llama normalización. Descanse puede probar diferentes imágenes – AruniRC

+0

Gracias, lo he hecho. ¿Cuál es el umbral de una buena imagen? – 2vision2

Respuesta

4

Probablemente pueda simplemente usar una medida estadística simple de la imagen para determinar si una imagen tiene suficiente contraste. La varianza de la imagen probablemente sea un buen punto de partida. Si la varianza está por debajo de un cierto umbral (para ser determinado empíricamente), entonces puede considerarlo como "bajo contraste".

+0

Es cierto que la varianza aumenta con el contraste de una imagen dada, pero como es una medida estadística, ignora las relaciones espaciales dentro de la imagen. Por lo tanto * puede * funcionar como un indicador de contraste confiable a veces, pero a menudo no lo hará. – misha

+1

el cálculo SD fue suficiente para mi trabajo. Gracias. – AruniRC

+0

@AruniRC Necesito calcular el contraste de una imagen. Lo hice calcificando "meanStdDev" de una imagen. ¿Estoy en lo cierto? A veces obtengo el valor de SD Más de 100. ¿Cuál sería el umbral para un buen Contraste? Y cuál es el rango de SD para convertirlo en una escala de 100. – 2vision2

5

Si está ajustando el contraste para que pueda establecer el umbral más tarde, es posible que pueda evitar el paso de ajuste de contraste si establece su umbral de forma adaptativa usando Ohtsu's method.

Si aún está interesado en conocer el contraste de la imagen, continúe leyendo.

Si bien hay un number of different ways para calcular "contraste". A menudo, esas métricas se aplican localmente en oposición a toda la imagen, para que el resultado más sensibles a contenido de la imagen:

  • dividir la imagen en barrios no superponer adyacentes.
  • Elija tamaños de barrio que sean aproximados al tamaño de las características de su imagen (por ejemplo, si su característica principal es el texto horizontal, haga que los vecindarios sean lo suficientemente altos para capturar 2 líneas de texto, y lo mismo).
  • Aplicar la métrica a cada vecindad individualmente
  • Umbral del resultado de la métrica para separar los bloques de varianza baja y alta. Esto evitará cosas tales como áreas de página grandes y en blanco que sesguen sus estimaciones de contraste.

A partir de ahí, se puede utilizar una serie de características para determinar contraste:

  • La proporción de altos bloques métricas a bajas bloques métricas
  • alta bloque métrica significa
  • distancia de intensidad entre el bloques métricos altos y bajos (utilizando medios, modos, etc.)

Esto puede servir como una mejor indicación del contraste de la imagen que glo variación de imagen bal solo. He aquí por qué:

alt text (stddev: 50.6)

alt text (STDDEV: 7,9)

Las dos imágenes son perfectamente en contraste (el fondo gris está ahí para que sea obvio que es una imagen), pero sus desviaciones estándar (y por lo tanto la varianza) son completamente diferente.

+0

sí aplique el método de umbralización de Otsu inicialmente, sin embargo, la parte de texto y su fondo se volvieron negros. Al ecualizar el histograma, el umbral fue correcto. – AruniRC

+0

Eliminé mi comentario anterior: se agregó por accidente. ¿Los cálculos locales de contraste lo llevaron a algún lado? No he visto las imágenes con las que trabajas, así que es difícil para mí sugerir algo además de lo que ya se ha dicho. Si publica una imagen de muestra, su pregunta puede ser más fácil de responder. – misha

+0

disculpa por la respuesta tardía (si todavía estás cerca: P). Actualmente estoy terminando una codificación de extracción de contorno después de lo cual comenzaré los ajustes de contraste. un desarrollador estándar simple con límites determinados experimentalmente parece viable. – AruniRC

3
  1. Calcular cumulative histogram de imagen.
  2. Realice la regresión lineal del histograma acumulativo en el formato y(x) = A*x + B.
  3. Calcular RMSE de real_cumulative_frequency(x)-y(x).
  4. Si ese RMSE está cerca de cero, la imagen ya está ecualizada. (Eso significa que para las imágenes ecualizadas los histogramas acumulativos deben ser lineales)

Idea está tomada de here.

EDIT: he ilustrado este enfoque en my blog (código C ejemplo incluido).

+0

:: No es lo suficientemente std .... ... Sus comentarios serán útiles ... –

+0

Hay muchos diferentes formas de calcular el contraste Pero, en mi opinión, si OP intenta descubrir que 'cvEqualizeHist()' se realizó en la imagen o no, debe tener en cuenta los detalles específicos de [ecualización de histograma] (http://en.wikipedia.org/wiki/Histogram_equalization) para detectar esa operación (o su ausencia) en la imagen. –

Cuestiones relacionadas