histograma de la imagen:
histograma es una expresión gráfica de la distribución de valores de píxeles de la imagen. Se cuenta el número de cada valor de color que aparece en la imagen.
Estadísticas histograma se utiliza para los datos de una sola dimensión, en general se convierte en una imagen en escala de grises debería vista YUV en curso o un elementos de visualización de cálculo de histograma.
En la aplicación, el histograma utiliza generalmente para ver cómo ajustar apropiadamente la exposición de la imagen, o puede ser relativamente cerca de la región de color de una imagen para mejorar el contraste de la contenido de la imagen (ecualización de histograma) por el estiramiento de la gama de colores
histograma implementación:
modo 1: el uso de herramientas proporcionadas para darse cuenta de la función matplotlib
import cv2
import dlib
from matplotlib import pyplot as plt
import numpy as np
image = cv2.imread("lena.tiff");
gray1 = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
plt.hist(gray1.ravel(), 256, [0, 256])
plt.show()
Forma de realización 2: cv2 implementado por la función
image = cv2.imread("lena.tiff");
gray1 = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray1], [0], None, [256], [0, 256])
plt.figure()
plt.plot(hist)
plt.show()
Modo 3: implementación personalizada
import cv2
import dlib
from matplotlib import pyplot as plt
import numpy as np
def calHist(img):
# hist = np.arange(256)
# for i in hist:
# hist[i] = 0
hist = np.zeros(256)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
for i in range(0,width):
for j in range(0,height):
r = img[i,j]
hist[r] = hist[r]+1
return hist;
image = cv2.imread("lena.tiff");
gray1 = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
histData = calHist(gray1);
plt.figure()
plt.plot(histData)
plt.show()
La figura Efecto:
volver histograma acumulativo implica representaciones:
Valor mínimo, un máximo de 1 ...
silencio introducir el concepto de ecualización del histograma:
acción de ecualización del histograma: tal imagen a través de una gama más amplia escala de grises escala de grises, mejorando de este modo el contraste de imagen;
otra ventaja es que la ecualización de histograma: no hay parámetros adicionales, todo el proceso está automatizado;
ecualización del histograma es una desventaja: después del estiramiento algún nivel gris no puede ser asignada a causa percepción de la imagen la granulosa;
histograma proceso de ecualización:
un histograma solicitud de escala de grises, el resultado es una matriz de 256 elementos.
frecuencia de requerimientos B de cada valor de color se produce en la imagen (frecuencia), y luego normalizado. (dividido por el número total de píxeles)
C. encuentra el número de función de distribución acumulativa para cada valor de color
d. obtención se calcula ecualización de histograma, la tabla de asignación para obtener el color LUT
E. d obtenido de acuerdo con la LUT escala de grises originales hacer la asignación de colores, representaciones dibujadas después de la ecualización del histograma
equ = cv2.equalizeHist(img)
cv2.imshow('equalization', np.hstack((img, equ))) # 并排显示
cv2.waitKey(0)
Anexo código de algoritmo:
import cv2
import dlib
from matplotlib import pyplot as plt
import numpy as np
#note:参数必须为灰度图,未对其他格式图做兼容处理
def histogram_equalization(grayImage):
hist = np.zeros(256)
histLut = np.zeros(256)
imgInfo = grayImage.shape
height = imgInfo[0]
width = imgInfo[1]
for i in range(0, width):
for j in range(0, height):
r = grayImage[i, j]
hist[r] = hist[r] + 1
index = 0
while hist[index] < 0:
++index;
pixelCount = width * height
scale = (256 - 1.) / (pixelCount - hist[index]);
sum = 0
for i in range(index, hist.size):
sum = sum + hist[i]
histLut[i] = (sum * scale + 0.5)
dst = np.zeros((height, width, 3), np.uint8)
for u in range(0, width):
for v in range(0, height):
c = histLut[grayImage[u, v]]
dst[u, v] = [c, c, c]
return dst
image = cv2.imread("lena.tiff");
gray1 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',histogram_equalization(gray1))
efecto figura:
escala de grises:
después de escala de grises de ecualización:
método de ecualización del histograma tiene un inconveniente conocido, ecualización haría brillo de la imagen global, ajuste de contraste, esto hará que el lugar más brillante brillante original, una mayor pérdida de brillo de detalles. En el diagrama siguiente, la estatua ha convertido en la superficie de toda la Bai después de la ecualización. Esta vez lo que necesita hacer es optimizado.
Referencia: https://www.jianshu.com/p/19ff65ac3844
adaptativo de igualación se utiliza para resolver este problema: se trata de un área pequeña en cada una de las (por defecto 8 × 8) ecualización de histograma. Por supuesto, si hay ruido, entonces el ruido se amplifica, es necesario contrastar el área pequeña ha sido restringido, por lo que el nombre completo algoritmo: contraste limitado de adaptación de ecualización del histograma CLAHE Contraste limitada de adaptación de ecualización de histograma
# 自适应均衡化,参数可选
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
cl1 = clahe.apply(img)
representaciones ecualización adaptativa :( amplia para encontrar la imagen de un rostro humano puede ver los detalles, y otros lugares han aumentado el contraste y excelente algoritmo?)
comparación Resumen gráfico:
Enlaces de referencia:
https://baike.baidu.com/item/ de densidad de probabilidad función / 5021996
Https://baike.baidu.com/item/ función de distribución acumulativa / 7763383 fr = aladdin?
HTTPS: // la WWW .cnblogs.com / YOYO-Atentamente / P / 6159101.html
https://blog.csdn.net/xuan_zizizi/article/details/82747897
https://blog.csdn.net/fengbingchun/article/details/79188021
HTTPS: //blog.csdn.net/piaoxuezhong/article/details/78269439
https://www.jianshu.com/p/19ff65ac3844
Histogramas presentaciones relacionadas con la cámara
https://baijiahao.baidu.com/s?id=1621984130964189747&wfr=spider&for=pc