HoG特徴量
大まかなアルゴリズム
- 入力画像の分割
- 微分フィルター
- 勾配強度と勾配方向
- 勾配方向の量子化
- 勾配方向ヒストグラムを計算
- 特徴量計算
入力画像を複数の”ブロック”に分割します。
各ブロックをさらに”セル”に分割します。
入力画像を微分フィルターに掛けます。
微分画像から、勾配強度|I|と勾配方向θを求めます。
$$|I| = \sqrt{ I_x^2 + I_y^2 }$$
$$\theta = \arctan \displaystyle \frac{ I_y }{ Ix }$$
勾配方向を”9方向”に量子化します。
セルごとに勾配強度で重み付けして、勾配方向ヒストグラムを計算します。
ブロックごとに正規化して、特徴量を計算します。
$$h(n) = \displaystyle \frac{ h(n) }{ H }$$
$$ H = \sqrt{ \displaystyle \sum h(k)^2 + \varepsilon }$$
Python
%matplotlib inline import matplotlib.pyplot as plt import cv2 from skimage.feature import hog from skimage import data, exposure img = cv2.imread('haruna_kankore.png') fd, hog_image = hog(img, orientations=8, pixels_per_cell=(16, 16), cells_per_block=(1, 1), visualize=True, multichannel=True) hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10)) plt.axis('off') plt.imshow(hog_image_rescaled, cmap=plt.cm.gray) plt.savefig('hog.png')
出力結果
元画像
出力
HOG特徴量で人検出
https://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf
参考
Histogram of Oriented Gradients — skimage 0.24.1rc0.dev0 documentation