Operador de descripción de características de HOG | Estudio del equipo de junio de Datawhale (tarea4)

Prefacio

HOG significa histograma de gradientes orientados y busca las características de la imagen de acuerdo con el histograma de gradientes orientados. Se puede utilizar para representar las características del objeto de la imagen, de modo que pueda detectar dichos objetos. (La siguiente imagen muestra las características extraídas por HOG)
Inserte la descripción de la imagen aquí

Proceso de extracción del descriptor de características del HOG:

  • Conversión de imágenes en escala de grises
  • Cálculo de gradiente
  • Histograma de dirección de gradiente de subcuadrícula
  • Descriptor de bloque
  • Normalización del descriptor de bloque

1 teoría

1.1 Cálculo de gradiente

Para obtener el histograma de gradientes, primero debe calcular los gradientes horizontal y vertical, lo cual se puede lograr filtrando la imagen utilizando los siguientes núcleos, que se utilizan para calcular los gradientes horizontal y vertical respectivamente.
Inserte la descripción de la imagen aquí

#调节图像对比度,减少光照对图像的影响
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('*.png', 0)
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img2 = np.power(img/float(np.max(img)),1/2.2)
plt.imshow(img2)
plt.axis('off')
plt.show()
img = np.float32(img2) / 255.0  # 归一化# 计算x和y方向的梯度
gx = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=1)
gy = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=1)# 计算合梯度的幅值和方向(角度)
mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)

1.2 Histograma de dirección de gradiente de subcuadrícula

Divídalo en una cuadrícula de celdas de 8 * 8 = 64 píxeles (la cuadrícula verde en la figura siguiente) y obtenga un histograma de dirección para cada celda.

Cada histograma de gradiente de 8 * 8 celdas es esencialmente un vector compuesto por 9 valores, correspondientes a la dirección del gradiente (ángulo) de 0, 20, 40, 60 ... 160, es decir, 9 contenedores. Luego cuente la contribución del gradiente en cada contenedor.
Inserte la descripción de la imagen aquí

1.3 Descriptor de bloque

Combine celdas de cuadrícula de 2 × 2 en un bloque grande, y la mitad de cada bloque es un área superpuesta.
Básicamente, el histograma de cada celda se fusiona en un histograma grande (el índice bin permanece sin cambios, entre 0-8)
Inserte la descripción de la imagen aquí
. Como puede ver en la figura anterior, la dirección del gradiente de más puntos tiende a 0 grados y 160 grados, lo que significa que la dirección del gradiente de estos puntos es hacia arriba o hacia abajo, lo que indica que hay un borde horizontal relativamente obvio en esta posición de la imagen. Por lo tanto, HOG es sensible a las esquinas y, debido a que dicho método estadístico también es insensible a los cambios en algunos valores de píxeles, puede adaptarse a diferentes entornos.

1.4 Normalización de descriptores de bloque

Hay muchos métodos de normalización: norma L1, norma L2, max / min, etc., generalmente elija la norma L2.
Inserte la descripción de la imagen aquí

2 código

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

if __name__ == '__main__':
    src = cv.imread("D:/python_opencv/stand.jpg")
    cv.imshow("input", src)
    
    hog = cv.HOGDescriptor()
    hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector())
    # Detect people in the image
    (rects, weights) = hog.detectMultiScale(src,
                                            winStride=(2,4),
                                            padding=(8, 8),
                                            scale=1.2,
                                            useMeanshiftGrouping=False)
    for (x, y, w, h) in rects:
        cv.rectangle(src, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv.imshow("peoples", src)
    #cv.imwrite("peoples.jpg",src)
    cv.waitKey(0)
    cv.destroyAllWindows()

Inserte la descripción de la imagen aquí
Ciertas partes deben mejorarse y la solución óptima se encontrará más adelante.

Supongo que te gusta

Origin blog.csdn.net/weixin_42326479/article/details/107168633
Recomendado
Clasificación