Saltar al contenido

Algoritmo de balance de blancos

Solución:

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 hacer esto, descarta los colores de los píxeles en cada extremo de los histogramas Rojo, Verde y Azul que son utilizados por solo 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 los píxeles que aparecen con muy poca frecuencia en los bordes exteriores de los histogramas (tal vez partículas de polvo, etc.) no influyen negativamente en los valores mínimos y máximos utilizados para estirar los histogramas, en comparación con Estirar contraste. Sin embargo, al igual que “Estirar contraste”, puede haber cambios de tono en la imagen resultante.

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

Un algoritmo relativamente simple es promediar los tonos (en HSV o HSL) de los píxeles más brillantes y más oscuros de la pantalla. En caso de apuro, elija solo el píxel más brillante. Si los tonos entre el más brillante y el más oscuro son demasiado diferentes, opte por el píxel brillante. Si la oscuridad es casi negra, opta por el píxel brillante.

¿Por qué incluso mirar el píxel oscuro? A veces, la oscuridad no es casi negra e insinúa la luz ambiental, la niebla o la neblina.

Esto tendrá sentido para usted si es un gran usuario de Photoshop. Los aspectos más destacados de una foto no están relacionados (o están débilmente relacionados) con el color subyacente del objeto. Son su mejor representación del tinte de color de la luz, a menos que la imagen esté tan sobreexpuesta que todo haya abrumado a los CCD.

Luego, ajuste los tonos de todos los píxeles.

Necesitará funciones rápidas de RGB a HSV y 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 utilizar el color de píxel promedio o el 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, se han esfumado de mi memoria. Probablemente puedas buscarlos en Google.

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


Hay muchas mejoras que hacer en este sencillo algoritmo. Puede promediar varios píxeles brillantes, cuadricular la imagen y capturar píxeles brillantes y oscuros de cada celda, etc. Encontrará algunos ajustes obvios después de implementar el algoritmo.

@Charles Ma ha sugerido utilizar el Gimp algoritmo de balance de blancos. 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 ofrece resultados bastante decentes

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *