skimage.feature.hog (http://scikit-image.org/docs/dev/api/skimage.feature.html#hog)Extrahiert HOG-Features aus dem Eingabebild, aber das Ausgabeergebnis ist 1d-Es ist ein Array, und es gibt ein Problem, bei dem ich nicht weiß, was es ist. https://github.com/holtzhau/scikits.image/blob/master/skimage/feature/hog.Sie können den Code in py lesen, um zu sehen, wie dieses Array interpretiert wird.
### Wichtige Eingabeargumente
--``` Ausrichtung```: Anzahl der Fächer im Histogramm (Standard = 9)
--``` pixels_per_cell```: Zellengröße (Standard = (8,8))
--``` cells_per_block```: Anzahl der Zellen pro Block (Standard = (3, 3))
### Schauen Sie sich die Ausgabe an
Zeile 180
#### **`hog.py`**
```py
return normalised_blocks.ravel()
Ich wollte, dass du es zurückbringst, ohne hier zu rappen. Betrachtet man die Deklaration von normalized_blocks,
Zeile 160
hog.py
n_blocksx = (n_cellsx - bx) + 1
n_blocksy = (n_cellsy - by) + 1
normalised_blocks = np.zeros((n_blocksx, n_blocksy, bx, by, orientations))
Die hier verwendeten Variablen werden um Zeile 100 deklariert
hog.py
sx, sy = image.shape
cx, cy = pixels_per_cell
bx, by = cells_per_block
n_cellsx = int(np.floor(sx // cx)) # number of cells in x
n_cellsy = int(np.floor(sy // cy)) # number of cells in y
Das 1-d-Array (sagen wir `` `retval```), das durch Drehen von Schwein erhalten wird, ist also
retval.reshape((n_blocksx, n_blocksy, bx, by, orientations))
Wenn Sie es als geben, können Sie es in seine ursprüngliche Form zurückbringen.
Beispielsweise kann die maximale Gradientenrichtung für jeden Block visualisiert werden.
visualize_argmaxhog.py
from skimage.feature import hog
from skimage.data import camera
import matplotlib.pyplot as plt
img = camera()
orientations = 9
pixels_per_cell = (8, 8)
cells_per_block = (3, 3)
h = hog(img, orientations=orientations, pixels_per_cell=pixels_per_cell, cells_per_block=cells_per_block)
sx, sy = img.shape[:2]
cx, cy = (8, 8)
bx, by = (3, 3)
n_cellsx = int(np.floor(sx // cx)) # number of cells in x
n_cellsy = int(np.floor(sy // cy)) # number of cells in y
n_blocksx = (n_cellsx - bx) + 1
n_blocksy = (n_cellsy - by) + 1
himg = h.reshape((n_blocksx * n_blocksy, bx, by, orientations))
vis = np.array([np.argmax(x.sum(axis=(0, 1))) for x in himg]).reshape((n_blocksx, n_blocksy))
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(vis, interpolation='nearest')
plt.axis('off')
Recommended Posts