Estoy haciendo algunos de procesamiento de imagen y necesito un algoritmo de balance de blancos automático que no es muy intensivo en términos de CPU, el tiempo de cálculo. Alguna recomendación?

EDIT: y si es relevante para la eficiencia, voy a ser su aplicación en Java con imágenes en color como una matriz de enteros.

InformationsquelleAutor Charles Ma | 2009-07-24

5 Comentarios

  1. 21

    Relativamente simple algoritmo es el promedio de los matices (en VHS o HSL) de los más brillantes y oscuras de los píxeles en la pantalla. En un apuro, ir con los más brillantes píxel solo. Si los matices entre los más brillantes y más oscuras son muy diferentes, ir con el pixel brillante. Si la oscuridad está cerca de black ir con el pixel brillante.

    ¿Por qué siquiera mirar a la oscuridad de píxeles? A veces la oscuridad no es de color casi negro, y alude a la luz ambiente o niebla o neblina.

    Esto tendrá sentido para usted si usted es un pesado Photoshop usuario. Pone de relieve, en una foto que no están relacionados (o débilmente relacionada) a la base del color del objeto. Son la mejor representación de la dominante de color de la luz, a menos que la imagen es tan sobreexpuesta que todo lo que ha abrumado a los CCDs.

    A continuación, ajustar los colores de todos los píxeles.

    Necesitará rápido de RGB a HSV y RGB HSV funciones. (Pero tal vez usted puede trabajar en RGB del píxel correcciones con una LUT o interpolación lineal.)

    Usted no quiere pasar por el promedio de los píxeles de color o de color más popular. De esa manera se encuentra la locura.

    Para encontrar rápidamente el color más brillante (y la más oscura), usted puede trabajar en RGB, pero usted debe tener multiplicadores para el verde, rojo y azul. En un monitor RGB 255 verde es más brillante que 255 rojo que es más brillante que 255 azul. Solía tener una buena multiplicadores en mi cabeza, pero, por desgracia, han huido de mi memoria. Usted probablemente puede google para ellos.

    Esto se producirá en una imagen que no tiene luces. Un mate pintado de la pared, por ejemplo. Pero yo no sé lo que usted puede hacer acerca de eso.


    Hay muchas mejoras para hacer este simple algoritmo. Usted puede el promedio de varios píxeles brillantes, la cuadrícula de la imagen y agarrar píxeles brillantes y oscuros de cada celda, etc. Usted encontrará algunos de los evidentes retoques después de la implementación del algoritmo.

    • Gracias! Voy a darle una oportunidad. también he encontrado un algoritmo muy simple que GIMP al parecer utiliza para automáticamente el balance de blancos, yo te banco marca de los dos algoritmos y ver cual es el adecuado para mí 🙂
    • Yo habría pensado que la mayoría de las fotos sería tener al menos 1 ultra-píxel blanco (255,255,255) – especialmente en la parte baja de la calidad de las cámaras que a menudo necesitan más ayuda con el balance de blancos – píxeles blancos y en realidad no ayudan a que el algoritmo a todos. Así que, a continuación, mira el lado brillante de píxeles?
    • también puede tomar un promedio de los más claros y más oscuros N% de los píxeles.
    • Usted dice «ajustar los tonos de todos los píxeles», pero no estoy seguro de lo que usted quiere decir. Una vez que sé dónde está el píxel más brillante es, ¿qué he de hacer para los matices de todos los otros píxeles?
    • Que es, probablemente, demasiado tarde, pero creo que lo que Nosredna que significó su frase es la siguiente: para el detectados «tono blanco» (r_w,g_w,b_w) todos los píxeles que debe ser amplificada por (1/r_w, 1/g_w, 1/b_w).
    • Gracias @wf34

  2. 20

    GIMP al parecer utiliza un algoritmo muy simple automático de balance de blancos.
    http://docs.gimp.org/en/gimp-layer-white-balance.html

    El Balance de Blancos comando ajusta automáticamente los colores de la capa activa por el estiramiento de la Roja, Verde y Azul de los canales por separado. Para ello, se descarta el color de los píxeles en cada extremo del Rojo, Verde y Azul histogramas que son utilizados por solo el 0,05% de los píxeles en la imagen y se extiende al resto del rango tanto como sea posible. El resultado es que los colores de los píxeles que ocurren con muy poca frecuencia en los bordes exteriores de los histogramas (tal vez pedacitos de polvo, etc.) no influyen negativamente en los valores máximos y mínimos utilizados para el estiramiento de la histogramas, en comparación con el Estiramiento de Contraste. Como «Estiramiento de Contraste», sin embargo, puede haber cambios de tono en la imagen resultante.

    Hay un poco más de retorcer que se describe aquí desde mi primer intento en la aplicación funciona esto parece funcionar para la mayoría de las fotos, pero el resto de las fotos parecen tener artefactos o contener demasiado de cualquiera de rojo, verde o azul :/

    • Gracias por este enlace. Yo no había veo que antes.
    • Tal vez usted podría implementar múltiples algoritmos y, a continuación, tratar de averiguar el algoritmo que se va a trabajar cuando, en función de algunas características de las imágenes. Para la exposición (una rhather problema similar), las cámaras modernas romper la imagen de arriba (además de que conocer el punto de enfoque, y al igual que @Matthias Wandel señalado, si flash se utiliza). Los fabricantes han analizado las bases de datos de muchas fotos para ver lo que funciona. Primeras cámaras recuerdo haciendo que se Nikon FA y un par de otros de la época.
    • Por el camino, usted puede encontrar las áreas que están en el enfoque por mirar el máximo contraste entre los píxeles adyacentes. Cuando un fotógrafo utiliza el flash, el área de enfoque es, en general, relativamente cerca de la cámara y podría tener algunos buenos puntos destacados de la flash.
    • Para el propósito de balance de blancos, probablemente la atención acerca de las áreas de enfoque más que el de las áreas de enfoque. Así que usted puede romper la pantalla en, digamos cuadrícula de 5×5 y la «calificación» de las células por el enfoque y, a continuación, el peso de ellos por su importancia para el equilibrio de blancos algoritmo. Podía callar ahora, si quieres. De lo contrario, probablemente voy a mantener a balbucear para siempre
    • Gracias Norsredna, estoy usando esto para el procesamiento de vídeo(que es la razón por la que necesita para ser eficaz, por lo que flash no es un problema, pero yo probablemente puede optimizar por solo volver a calcular el balance de blancos de los parámetros de cada 10 cuadros o algo así, ya que la luz no suele cambiar con frecuencia. 😛
  3. 6

    @Carlos Ma ha sugerido el uso de la Gimp balance de blancos algoritmo. En python y numpy esto podría tener este aspecto:

    # white balance for every channel independently
    def wb(channel, perc = 0.05):
        mi, ma = (np.percentile(channel, perc), np.percentile(channel,100.0-perc))
        channel = np.uint8(np.clip((channel-mi)*255.0/(ma-mi), 0, 255))
        return channel
    
    image = cv2.imread("foo.jpg", 1) # load color
    imWB  = np.dstack([wb(channel, 0.05) for channel in cv2.split(img)] )

    es rápido, simple y proporciona muy buenos resultados

  4. 4

    Blanco algoritmos de equilibrio son difíciles. Incluso las cámaras digitales llegue el mal de vez en cuando, a pesar de que saben un montón de información adicional acerca de la imagen – como si el flash se utiliza, y el nivel de luz.

    Para empezar, acabo de promedio rojo, verde y azul, y el uso que, como el balance de blancos punto. Establecer límites en los que – de mantenerse dentro de los rangos de tungsteno, fluorescente, y la luz del día. No será perfecta, pero cuando su mal, será relativamente fácil explicar por qué.

    • Un popular primer intento, pero que va a girar una bola roja en la nieve a un dullish bola roja en un mar de cian. Es peor que la ausencia de balance de blancos, la OMI.
  5. 3

    Uno recientemente publicado algoritmo es el Color algoritmo de Distribución y puede ser encontrado aquí: http://www.comp.nus.edu.sg/~marrón/pdf/ColorConstancyJOSAv10.pdf En el papel hay también la referencia al código fuente de Matlab (http://www.comp.nus.edu.sg/~whitebal/luminosidad/archivos/illuminantEstimator.m). Es un algoritmo simple que puede ser fácilmente programados y los resultados muestran que es muy rápido.

    Si necesita más rápida y, al mismo tiempo, precisa el balance de blancos (la constancia del color) de los algoritmos, usted debe comprobar este sitio: http://www.fer.unizg.hr/ipg/resources/color_constancy/

    Hay varios algoritmos con sus respectivos fuente codificada que puede ser el que usted busca.

Dejar respuesta

Please enter your comment!
Please enter your name here