Combinar cálculos de tablas de consulta e histogramas.

Ya hemos visto lo útiles que resultan las tablas de consulta para agilizar cálculos y también la utilidad del histograma que al ser una representación estadística de la imagen nos permite calcular ajustes globales de la imagen con solo 256 valores. ¿A que seria genial que ambos métodos se pudieran usar conjuntamente? La vida es bella, ya que no solo es posible sino que es realmente sencillo.

En los distintos métodos que usan el histograma (ajuste del brillo y contraste, ecualización del histograma, …) sencillo que calcular la tabla de consulta correspondiente. Pero al aplicar estas tablas la imagen cambia y por tanto el histograma también. ¿Podemos calcular el nuevo histograma sin tener que volver a recorrer toda la imagen contando pixels? Por fortuna para el interés de esta entrada la respuesta es sí. Además de una forma realmente sencilla.

  1. Creamos un nuevo histograma (newHistogram en el ejemplo) con todos sus valores a 0.
  2. Recorremos todos los posibles valores i del histograma original (por ejemplo de 0 a 255).
  3. Para cada valor i del histograma original consultamos su valor (lut[i]) en la tabla de consulta lut
  4. Se suma el valor del histogram[i] a newHistogram[lut[i]]

for(var i = 0; i < 256; ++i){
  newHistogram[lut[i]] += histogram[i];
}

Con solo recorrer 256 elementos tenemos el histograma actualizado y nos hemos ahorrado volver a recorrer la imagen.