Python+OpenCV|HoG特徴量

画像処理とOpenCV




HoG特徴量

大まかなアルゴリズム

  1. 入力画像の分割
  2. 入力画像を複数の”ブロック”に分割します。
    各ブロックをさらに”セル”に分割します。

  3. 微分フィルター
  4. 入力画像を微分フィルターに掛けます。

  5. 勾配強度と勾配方向
  6. 微分画像から、勾配強度|I|と勾配方向θを求めます。

    $$|I| = \sqrt{ I_x^2 + I_y^2 }$$

    $$\theta = \arctan \displaystyle \frac{ I_y }{ Ix }$$

  7. 勾配方向の量子化
  8. 勾配方向を”9方向”に量子化します。

  9. 勾配方向ヒストグラムを計算
  10. セルごとに勾配強度で重み付けして、勾配方向ヒストグラムを計算します。

  11. 特徴量計算
  12. ブロックごとに正規化して、特徴量を計算します。

    $$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

参考

qiita:画像からHOG特徴量の抽出

Histogram of Oriented Gradients — skimage 0.23.0rc0.dev0 documentation

タイトルとURLをコピーしました