tipos teoria entender ejemplos como caracteristicas canon blancos algorithm image-processing image-enhancement

algorithm - teoria - Algoritmo de balance de blancos



teoria de balance de blancos (5)

Estoy procesando algunas imágenes y necesito un algoritmo automático de balance de blancos que no sea demasiado intenso en términos de tiempo de computación de la CPU. ¿Alguna recomendación?

EDITAR: y si es relevante para la eficiencia, lo implementaré en Java con imágenes en color como una matriz de enteros.


GIMP aparentemente usa un algoritmo muy simple para el balance de blancos automático. http://docs.gimp.org/en/gimp-layer-white-balance.html

El comando Balance de blancos ajusta automáticamente los colores de la capa activa estirando los canales Rojo, Verde y Azul por separado. Para ello, descarta los colores de los píxeles en cada extremo de los histogramas Rojo, Verde y Azul que solo utilizan el 0,05% de los píxeles de la imagen y extiende el rango restante tanto como sea posible. El resultado es que los colores de píxeles que ocurren con poca frecuencia en los bordes externos de los histogramas (quizás trozos de polvo, etc.) no influyen negativamente en los valores mínimos y máximos utilizados para estirar los histogramas, en comparación con el Contraste de contraste. Sin embargo, como "Contraste de estiramiento", puede haber cambios de matiz en la imagen resultante.

Hay un poco más de ajustes de los que se describen aquí ya que mi primer intento de implementar esta obra parece funcionar para la mayoría de las fotos, pero otras parecen tener artefactos o contienen demasiado verde o azul: /


Los algoritmos de balance de blancos son difíciles. Incluso las cámaras digitales se equivocan de vez en cuando, aunque saben mucha información adicional sobre la imagen, como si se utilizó el flash y el nivel de luz.

Para empezar, solo promediaría rojo, verde y azul, y lo usaría como punto de balance de blancos. Establezca límites en él: manténgase dentro de los rangos de tungsteno, fluorescente y luz diurna. No será perfecto, pero cuando esté mal, será relativamente fácil explicar por qué.


Un algoritmo recientemente publicado es el algoritmo de Distribución del color y se puede encontrar aquí: http://www.comp.nus.edu.sg/~brown/pdf/ColorConstancyJOSAv10.pdf En el documento también se hace referencia a la fuente de Matlab código ( http://www.comp.nus.edu.sg/~whitebal/illuminant/files/illuminantEstimator.m ). Es un algoritmo simple que se puede programar fácilmente y los resultados muestran que es muy rápido.

Si necesita algoritmos adicionales rápidos y al mismo tiempo precisos de equilibrio de blancos (constancia del color), debe consultar este sitio: http://www.fer.unizg.hr/ipg/resources/color_constancy/

Hay varios algoritmos con sus respectivos códigos fuente que podrían ser solo los que buscas.


Un algoritmo relativamente simple es promediar los matices (en HSV o HSL) de los píxeles más brillantes y más oscuros de la pantalla. En un apuro, ve con el pixel más brillante solamente. Si los tonos entre el más brillante y el más oscuro son demasiado diferentes, elija el píxel brillante. Si la oscuridad es casi negra, vaya con el píxel brillante.

¿Por qué siquiera mirar el pixel oscuro? A veces, la oscuridad no está cerca del negro, e insinúa la luz ambiental, la niebla o la neblina.

Esto tendrá sentido para usted si es un usuario pesado de Photoshop. Los aspectos destacados de una fotografía no están relacionados (o están poco relacionados) con el color subyacente del objeto. Son su mejor representación del tono de color de la luz, a menos que la imagen esté tan sobreexpuesta que todo haya sobrepasado los CCD.

Luego ajuste los tonos de todos los píxeles.

Necesitará funciones rápidas de RGB a HSV y de HSV a RGB. (Pero tal vez pueda trabajar en RGB para las correcciones de píxeles con una LUT o interpolación lineal).

No desea ir por color de píxel promedio o color más popular. De esa manera yace la locura.

Para encontrar rápidamente el color más brillante (y el más oscuro), puede trabajar en RGB, pero debe tener multiplicadores para 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 buenos multiplicadores en mi cabeza, pero, por desgracia, han huido de mi memoria. Usted puede probablemente google para ellos.

Esto fallará en una imagen que no tenga reflejos. Una pared pintada mate, por ejemplo. Pero no sé qué puedes hacer al respecto.

Hay muchas mejoras para hacer a este algoritmo simple. Puede promediar múltiples píxeles brillantes, cuadricular la imagen y captar píxeles brillantes y oscuros de cada celda, etc. Encontrará algunos ajustes obvios después de implementar el algoritmo.


@Charles Ma ha sugerido usar el algoritmo de balance de blancos de Gimp . En python y numpy esto podría verse así:

# 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 resultados bastante decentes