[PYTHON] À propos de la sortie HOG de Scikit-Image

skimage.feature.hog (http://scikit-image.org/docs/dev/api/skimage.feature.html#hog)Extrait les fonctionnalités HOG de l'image d'entrée, mais le résultat de sortie est 1d-C'est un tableau, et il y a un problème dont je ne sais pas ce que c'est. https://github.com/holtzhau/scikits.image/blob/master/skimage/feature/hog.Vous pouvez lire le code dans py pour voir comment interpréter ce tableau.



### Arguments d'entrée importants

 --```orientations```: Nombre de cases dans l'histogramme (par défaut = 9)
 --``` pixels_per_cell```: taille de la cellule (par défaut = (8,8))
 --``` cells_per_block```: Nombre de cellules par bloc (par défaut = (3, 3))

### Jetez un œil à la sortie

 Ligne 180


#### **`hog.py`**
```py

return normalised_blocks.ravel()

Je voulais que tu le rendes sans te défiler ici. En regardant la déclaration de normalised_blocks,

Ligne 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))

Les variables utilisées ici sont déclarées vers la ligne 100

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

Ainsi, le tableau 1-d (disons retval```) obtenu en tournant hog est

retval.reshape((n_blocksx, n_blocksy, bx, by, orientations))

Si vous le donnez comme, vous pouvez le remettre à sa forme d'origine.

Exemple d'utilisation

Par exemple, la direction du gradient maximum pour chaque bloc peut être visualisée.

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')

kobito.1422522927.516947.png

Recommended Posts

À propos de la sortie HOG de Scikit-Image
À propos de tout numpy
À propos de l'attribution de numpy.ndarray
À propos de MultiIndex of Pandas
À propos de la variable du chainer
Bases de python: sortie
À propos de max_iter de LogisticRegression () de scikit-learn
À propos du chemin japonais de pyminizip
À propos du support japonais de cometchat
À propos de tout numpy (2e)
À propos du calcul des coûts de MeCab
À propos de la fraction approximative du rapport de circonférence
À propos des composants de Luigi
Sortie de débogage de la commande calice
À propos des fonctionnalités de Python
À propos de la gestion des données d'Anvil-App-Server
À propos de la valeur de retour de pthread_mutex_init ()
À propos de la valeur de retour de l'histogramme.
À propos du type de base de Go
À propos de la limite supérieure de threads-max
À propos du croisement circulaire d'algorithmes génétiques
À propos du comportement de yield_per de SqlAlchemy
À propos de l'erreur d'importation de PyQt5.QtWidgets (Anaconda)
À propos de la taille des points dans matplotlib
À propos du traitement des demi-teintes couleur des images
À propos de la liste de base des bases de Python