Was ist ein Histogramm orientierter Gradienten (HOG)?
Das HOG ist eine globale Deskriptormethode (Merkmalsextraktion), die auf jedes Pixel in einem Bild angewendet wird, um Nachbarschaftsinformationen (Pixelnachbarschaft) wie Textur zu extrahieren und diese Informationen aus einem bestimmten Bild in eine reduzierte/kondensierte Vektorform namens Merkmalsvektor zu komprimieren/abstrahieren Das könnte die Funktion dieses Bildes beschreiben, die sehr nützlich ist, wenn es darum geht, Kanten- und Verlaufsstrukturen in einem Bild zu erfassen. Darüber hinaus können wir dieses verarbeitete Bild zur Objekterkennung oder Objekterkennung vergleichen.
1- Berechnen Sie das Verlaufsbild
Um Kanteninformationen zu extrahieren und zu erfassen, wenden wir einen Sobel-Operator an, der aus zwei kleinen Matrizen (Filter/Kernel) besteht, die den Intensitätsunterschied bei Graustufen messen (überall dort, wo eine starke Intensitätsänderung auftritt).
Wir wenden diesen Kernel durch Faltung auf Pixel des Bildes an:
Nachdem wir nun Sobel Kernel auf das Bild angewendet haben, können wir die Größe und Ausrichtung eines Bildes berechnen:
Die Gradienten bestimmen die Stärke (Größe) und Richtung (Ausrichtung) der Kanten an einem bestimmten Punkt. Die Kantenrichtung verläuft senkrecht zur Richtung des Gradientenvektors an der Stelle, an der der Gradient berechnet wird. Mit anderen Worten, die Länge und Richtung des Vektors.
2- Berechnen Sie das Histogramm des Gradienten
Für jedes Pixel haben wir zwei Werte: Größe und Ausrichtung. Um diese Informationen zu etwas Sinnvollem zusammenzufassen, verwenden wir ein Histogramm, das dabei hilft, diese Werte effektiv zu organisieren und zu interpretieren.
Wir erstellen ein Histogramm von Gradienten in diesen Zellen (8 x 8), die 64 Werte haben, die auf Bins im Histogramm verteilt sind, die in 9 Bins mit jeweils 20 Grad (von 0° bis 180°) quantisiert werden. Der Größenwert (Kantenstärke) jedes Pixels wird als „Stimme“ zum entsprechenden Orientierungsabschnitt hinzugefügt, sodass die Spitzen des Histogramms die dominanten Orientierungen des Pixels offenbaren.
3- Normalisierung
Da die Gradientengrößen von den Lichtverhältnissen abhängen, werden die Histogramme durch die Normalisierung skaliert, um den Einfluss von Beleuchtungs- und Kontrastschwankungen zu reduzieren.
Jeder Block besteht typischerweise aus einem Zellengitter (2×2). Dieser Block gleitet überlappend über das Bild, was bedeutet, dass jede Zelle in mehreren Blöcken enthalten ist.
Jeder Block verfügt über 4 Histogramme (4 Zellen), die verkettet werden können, um einen 4 (Zellen) x 9 (Bins) x 1-Vektor = 36 x 1 Elementvektor für jeden Block zu bilden; Gesamtbild im Beispiel: 7 Zeilen x 15 Spalten = 7x15x36=3780 Elemente. Dieser Merkmalsvektor wird als bezeichnet HOG-Deskriptorund der resultierende Vektor wird als Eingabe für Klassifizierungsalgorithmen wie SVM verwendet.
# we can be utilizing the hog descriptor from skimage because it has visualization instruments accessible for this instance
import cv2
import matplotlib.pyplot as plt
from skimage import colour, function, publicity# Load the picture
img = cv2.imread('The trail of the picture ..')
# Convert the unique picture to RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Convert the unique picture to grey scale
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_RGB2GRAY)
plt.imshow(img_gray,cmap="grey")
# These are the standard major parameters to tune within the HOG algorithm.
(H,Himage) = function.hog(img_gray, orientations=9, pixels_per_cell=(8,8), cells_per_block=(2,2),visualize=True)
Himage = publicity.rescale_intensity(Himage, out_range=(0,255))
Himage = Himage.astype("uint8")
fig = plt.determine(figsize=(15, 12), dpi=80)
plt.imshow(Himage)
Wie Sie sehen, erfasst HOG effektiv die allgemeine Gesichtsform (Augen, Nase, Kopf) und Hände. Dies ist darauf zurückzuführen, dass HOG sich auf die Verlaufsinformationen im gesamten Bild konzentriert, was es äußerst effektiv für die Erkennung von Linien und Formen macht. Darüber hinaus können wir die vorherrschenden Gradienten und ihre Intensität an jedem Punkt im Bild beobachten.
(HOG)-Algorithmus zur Erkennung von Menschen in einem Bild
HOG ist ein beliebter Merkmalsdeskriptor in der Bildverarbeitung, der sich besonders intestine zum Erkennen von Formen und Umrissen, beispielsweise der menschlichen Type, eignet. Dieser Code nutzt den integrierten HOG-Deskriptor von OpenCV und ein vorab trainiertes Help Vector Machine (SVM)-Modell, das speziell für die Erkennung von Personen trainiert wurde
# Load the picture
img = cv2.imread('The trail of the picture ..')# Convert the unique picture to RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Convert the unique picture to grey scale
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_RGB2GRAY)
#Initialize the HOG descriptor and set the default SVM detector for folks
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# Detect folks within the picture utilizing the HOG descriptor
bbox, weights = hog.detectMultiScale(img_gray ,winStride = (2,2), padding=(10,10),scale=1.02)
# Draw bounding bins round detected folks
for (x, y, w, h) in bbox:
cv2.rectangle(img_rgb, (x, y),
(x + w, y + h),
(255, 0, 0), 4)
plt.imshow(img_rgb)
Nach dem Laden des Testbilds verwenden wir die Methode „DetectMultiScale“ von HOG, um Personen zu erkennen. Dabei ist „winStride“ so eingestellt, dass ein Pixel professional Schritt übersprungen wird. Dadurch wird die Geschwindigkeit verbessert, indem etwas an Genauigkeit eingebüßt wird, was bei der Objekterkennung von entscheidender Bedeutung ist, da es sich um einen rechenintensiven Prozess handelt. Obwohl der Detektor möglicherweise alle Personen identifiziert, kommt es manchmal zu einem Fehlalarm, bei dem ein Körperteil einer Individual als eine andere Individual erkannt wird. Um dies zu beheben, können wir Non-Maxima Suppression (NMS) anwenden, um überlappende Begrenzungsrahmen zu eliminieren, obwohl eine schlechte Konfiguration (Winterfestmachung, Polsterung, Skalierung) gelegentlich dazu führen kann, dass Objekte nicht erkannt werden.
wrap –up Die Berechnung des HOG-Deskriptors umfasst mehrere Schritte:
1. Gradientenberechnung
2. Orientierungs-Binning
3. Deskriptorblöcke
4. Normalisierung
5. Bildung von Merkmalsvektoren
In diesem Artikel haben wir die Mathematik hinter HOG untersucht und wie einfach es dank OpenCV in nur wenigen Codezeilen anzuwenden ist! Ich hoffe, Sie fanden diesen Leitfaden hilfreich und es hat Ihnen Spaß gemacht, die Konzepte durchzuarbeiten. Vielen Dank fürs Lesen und bis zum nächsten Beitrag!
- L. Daudet, B. Izrar und R. Motreff, Histogramme orientierter Gradienten zur menschlichen Erkennung(2010), HAL Open Science.
- Satya Mallick, Bilderkennung und Objekterkennung: Teil 1,2016, OpenCV lernen.
- Satya Mallick, Histogramm orientierter Verläufe, erklärt mit OpenCV 2016, lernen Sie OpenCV