Histograma (foto)

Un histograma (en fotografía ) es un gráfico de la distribución estadística de elementos de una imagen digital con diferente brillo , en el que el eje horizontal representa el brillo y el eje vertical representa el número relativo de píxeles con un valor de brillo específico.

Habiendo estudiado el histograma, puede tener una idea general de la exposición , el contraste y la saturación de color correctos de la imagen, evaluar la corrección requerida tanto durante el disparo (cambio de exposición, balance de color, iluminación o composición de la imagen) como durante posteriores Procesando.

Por lo general, solo se muestra un histograma de luminosidad en la pantalla de una cámara digital (las excepciones son las costosas cámaras SLR), y un histograma para todos los canales de color (consulte Separación de colores ) ya está disponible en una computadora , en aplicaciones de procesamiento de gráficos de trama .

Información básica

Histograma de imagen (a veces: gráfico de nivel o simplemente niveles ): un histograma de niveles de saturación de imagen (total o dividido por canales de color ).

Un histograma de imagen le permite evaluar la cantidad y variedad de tonos en una imagen, así como el nivel general de brillo en una imagen. Por ejemplo, una imagen subexpuesta alcanzará su punto máximo en la región de color bajo y caerá (o no tendrá ningún nivel) en la región de color brillante, mientras que una imagen sobreexpuesta hará lo  contrario. Una imagen con un rango dinámico insuficiente tendrá una ráfaga estrecha de brillo. La representación académica de la forma de histograma de imagen ideal es una gaussiana plana, en la que hay pocos colores muy oscuros y muy brillantes, y a medida que se acercan a los colores promedio, su número aumenta. Válido para disparar con suficiente iluminación de relleno (que afecte a toda la escena) y sin fuentes de luz en el encuadre.

En el caso general, el histograma de la imagen no describe las cualidades artísticas de la imagen (por ejemplo, fotografiar una silueta a contraluz se verá como una imagen subexpuesta (o sobreexpuesta) en el histograma), pero en la mayoría de los casos le permite navegar en la "dirección de corrección" de la imagen (si se requiere dicha corrección).

Edición de niveles

Muchos editores de fotos (p. ej. , Adobe Photoshop , GIMP ) y programas de desarrollo de archivos Raw (UFRAW, PhotoOne, CaptureNX) le permiten editar niveles de imagen. Se puede hacer de las siguientes maneras:

Algoritmo de construcción

Construimos una matriz, la llenamos con ceros. Por lo general, matriz [0..255]

Bucle, para cada píxel:

Seleccione el canal de color deseado o encuentre el brillo por la fórmula. Píxel -> valor El valor resultante debe estar dentro del rango del índice de matriz, por ejemplo [0..255]. Aumente el valor de matriz[valor] en 1.

Fin de ciclo.

La matriz resultante es un histograma, los elementos de la matriz son las alturas de las columnas.

Implementación en Python :

# codificación:utf """El usuario ingresa el nombre del archivo con la imagen cuyos histogramas deben construirse. Se construyen histogramas para cada uno de los canales, para brillo (Luminancia) y el histograma RGB. El programa construye histogramas y los guarda en la carpeta actual Los histogramas resultantes prácticamente no difieren de los histogramas obtenidos en programas comerciales El programa requiere Python 2.7 con PIL instalado""" de PIL import Image , ImageDraw # módulos de PIL def lum ( c ): #color de un píxel RGB -> valor de brillo #fórmula que se usa comúnmente para determinar el retorno de brillo int ( 0.3 * c [ 0 ] + 0.59 * c [ 1 ] + 0.11 * c [ 2 ]) def r ( c ): color de píxel #RGB -> valor R devuelve c [ 0 ] def g ( c ): color de píxel #RGB -> valor de retorno G c [ 1 ] def b ( c ): color de píxel #RGB -> B value return c [ 2 ] def drawhist ( hname , H , harr ): """ Dibuja un gráfico, guárdalo en un archivo en la carpeta actual hname - nombre de archivo H - altura del dibujo harr - matriz con alturas de barra en el histograma " "" W = len ( harr ) # número de elementos de matriz hist = Imagen . new ( "RGB" , ( W , H ), "white" ) #create drawing in memory draw = ImageDraw . Draw ( hist ) #objeto a dibujar en el dibujo maxx = float ( max ( harr )) #altura de la barra más alta if maxx == 0 : #bars are 0 draw . rectángulo ((( 0 , 0 ), ( W , H )), relleno = "negro" ) else : for i in range ( W ): draw . línea ((( i , H ),( i , H - harr [ i ] / maxx * H )), fill = "black" ) #dibujar barras del dibujo #eliminar objeto histórico . save ( hname ) #guardar imagen en archivo # lista con funciones y prefijos de nombre de archivo fnlist = [( lum , "luminosidad_" ), ( r , "r_channel_" ), ( g , "g_channel_" ), ( b , "b_channel_" )] fname = entrada ( "nombre del archivo de entrada: " ) #Nombre del archivo de entrada , histograma cat. necesita construir im = Image . abrir ( fname ) # abrir un archivo # obtener una lista de la forma [(n1, c1), (n2, c2), ...], donde # c es el color del píxel en RGB # n es el número de píxeles que tienen el color dado clrs = im . getcolors ( tamaño im . [ 0 ] * tamaño im . [ 1 ]) # ancho, alto del histograma. # No se debe cambiar el ancho, porque todas las funciones se muestran en [0..255] W , H = 256 , 100 para fn , hname en fnlist : #iterar sobre todas las funciones harr = [ 0 for i in range ( W )] #crear una matriz [0, 0 , 0, ...] de longitud W para n , c en clrs : #bucle a través de la lista creada arriba index = fn ( c ) #fn - asigna el color al brillo o resalta el canal de color #los índices de los elementos de la matriz muestran los valores de brillo y así sucesivamente. Rango [0..255] #valores de los elementos de la matriz = número de píxeles con def. valor de brillo, etc. harr [ índice ] += n drawhist ( hname + "hist.png" , H , harr ) # dibujar histograma # Dibujar histogramas por brillo y canales, ahora # Dibujar histograma RGB rharr = [ 0 para i en rango ( W )] gharr = lista ( rharr ) bharr = lista ( rharr ) para n , c en clrs : rharr [ r ( c )] += n gharr [ g ( c )] += n bharr [ b ( c )] += n harr = [( rharr [ i ] + gharr [ i ] + bharr [ i ]) / 3 for i in range ( W )] drawhist ( "RGB_hist.png" , H , harr )

Uso en fotografía

Algunas cámaras le permiten ver el histograma de la imagen para las imágenes capturadas (y algunos modelos con enfoque de contraste, durante el enfoque).

Enlaces