versión Python del aprendizaje de procesamiento de imágenes 4- histograma, ecualización del histograma y optimización

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:
Aquí Insertar imagen Descripción
volver histograma acumulativo implica representaciones:
Valor mínimo, un máximo de 1 ...
Aquí Insertar imagen Descripción
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
Aquí Insertar imagen Descripción
d. obtención se calcula ecualización de histograma, la tabla de asignación para obtener el color LUT
Aquí Insertar imagen Descripción
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:
Aquí Insertar imagen Descripción
después de escala de grises de ecualización:
Aquí Insertar imagen Descripció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?)
Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción
comparación Resumen gráfico:
Aquí Insertar imagen Descripción
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

Publicado 90 artículos originales · ganado elogios 26 · Vistas de 100.000 +

Supongo que te gusta

Origin blog.csdn.net/sky_person/article/details/93524091
Recomendado
Clasificación