Lernen record - Bild Gradientenhistogramm Funktionen

Merkmal-Deskriptoren Gradienten Histogramm des Bildes

Feature Descriptor ist, das Bild durch das Bildextraktions nützliche Informationen dargestellt zu vereinfachen, und irrelevante Informationen werden verworfen;

Gradientenhistogramm (Histogramm von Gradienten, HOG)

1. Das Bild wird in der Zelle unterteilt entsprechend einen Satz Verhältnis, wie beispielsweise ein Bild von 1600 * 3200 * 16 ein Verhältnis von 16, kann in die Zelle 100 * 200 unterteilt werden, wobei jede Zelle 16 Pixel 16 * Kanal * ist. ( Für Farbbilder drei Arten von Kanälen werden Gradienten berechnet werden beurteilt, wobei die maximalen Gradient)

2. Die Berechnung der Größe und Richtung einer jeden Zelle (zuerst die x und y-Richtung berechnen, die jeweils mit gx, gy repräsentieren, und dann kombiniert)

Gradientenrichtung Wert des Absolutwerts und daher der Winkelbereich [0, 180 °] berechnet Gradientenhistogramm der Pixelzelle, wobei der erste Winkelbereich ist unterteilt in 9 Teile, das heißt 9 Klassen, die jeweils von 20 ° als eine Einheit, d.h. Diese Pixel können in neun Gruppen entsprechend dem Winkel geteilt werden. Alle die Gradientenwerte zu den Pixeln in jedem ansammelt Werten entsprechen 9 erhalten werden können. Der Histogramm - Array von neun Werten zusammengesetzt ist , entsprechend den Winkel 0,20,40,60 ... 160.

Solche Pixel in der Zeichnung oben Richtung durch blauen Kreis umgeben ist, ist der Winkel 80 Grad, zu dem Pixel die Amplitude 2 entsprechen, wobei das Histogramm-Bin auf 80 plus 2 Grad entspricht. Roter Kreis um das Pixel umgibt, die einen Winkel von 10 Grad zwischen 0 Grad und 20 Grad, wird die Amplitude gleich 4 ist, dann wird der Wert des Gradienten wurde im Verhältnis zu 0 Grad und 20 Grad unterteilt, die den Behälter entspricht, von denen jede angewendet wird, 2.

Nun mit einem Gradienten-Histogramm der Zahl 9 ist anstelle der ursprünglichen dreidimensionalen Matrix, das heißt, anstelle von 16 * 16 * 2 Werten. Zu diesem Zeitpunkt repräsentieren die Bildelemente 100 * 200 * 9.

3. Blocknormalisierung

HOG zu einem Bereich 16 * 16 als eine Zelle, wiederum mit 2 * 2-Zelle als eine Gruppe, zu einem Block. Jede Zelle hat neun Werte, so gibt es ein 2 * 2 Block * 9 = 36 Werte, die durch den Block HOG Schiebefenster erhalten.

Gradient Gesamtbild ist sehr empfindlich gegenüber Licht, wie beispielsweise das Bild durch den Pixelwert verdunkeln um 2 haupt, dann wird die Gradientengröße um die Hälfte reduziert werden, so dass der Wert des Histogramms wird um die Hälfte reduziert werden. Im Idealfall betroffen sind , nicht durch Beleuchtungsänderungen, wir wollen , dass unsere Feature - Deskriptoren, dann brauchen wir „normalisiert“ , um Histogramm .

Es zeigt , wie ein normalisiertes Histogramm vor dem Check - Vektoren der Länge 3 ist , wie eine normalisiert: Angenommen , wir haben eine [128,64,32]Vektorlänge, Vektor ist sqrt (128 ^ 2 + 64 ^ 2 + 32 ^ 2) = 146,64, die die L2 - Vektornorm bezeichnet wird. Jedes Element dieses Vektors wird durch 146,64 geteilt , um einen normalisierten Vektor zu erhalten  [0.87, 0.43, 0.22]. Jetzt gibt es einen neuen Vektor wird 2 mal [128x2, 64x2, 32x2] erster Vektor, das heißt  [256, 128, 64], wir dieser Vektor normiert ist, können Sie die Ergebnisse nach dem normalisierten ersten Vektor und Rückkehr sehen ein Ergebnis derselben. Also, für die Vektor Normalisierung kann den Einfluss der gesamten Beleuchtung beseitigen.

Wissen, wie normalisiert, jetzt die Gradientenblock Histogramme (Anmerkung keine Zelle) normalisiert werden, einen Block vier Histogramme diese vier Histogramms gespleißten Vektor der Länge 36, dann sind diese Vektor wird normalisiert.

Da das Gleitfenster verwendet wird, so dass jeder Swipe wieder wird in diesem Fenster normalisierten Vektoren der Länge 36 berechnet.

4. Der Merkmalsvektor wird HOG berechnet

Das Bild einer 1600 * 3200 oberhalb Zelle gesagt Gradientenberechnung 16 * 16, * 2 und 1 und 2 in Schritten von Blocknormalisierungsschiebeoperation HOG Merkmalsvektor wird schließlich erhalten (1600 / 16-1) * ( 3200 / 16-1) * 9 * (2 * 2), das heißt, [1 110 484].

Code-Implementierung

# 计算x和y以及合并的梯度值和方向
import cv2
import numpy as np
​
# Read image
img = cv2.imread('runner.jpg')
img = np.float32(img) / 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)



# 计算整体的HOG特征向量
from skimage import feature, exposure
import cv2
image = cv2.imread('runner.jpg')
fd, hog_image = feature.hog(image, orientations=9, pixels_per_cell=(16, 16),
                    cells_per_block=(2, 2), visualize=True)
​
# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))
​
cv2.imshow('img', image)
cv2.imshow('hog', hog_image_rescaled)
cv2.waitKey(0)==ord('q')

 

Referenzen

Ein Text erklärt Histogram von Oriented Gradienten (HOG)

 

Veröffentlicht 117 Originalarbeiten · erntete Lob 166 · Ansichten 260 000 +

Ich denke du magst

Origin blog.csdn.net/u010420283/article/details/104885754
Empfohlen
Rangfolge