方向勾配ヒストグラム#

方向勾配ヒストグラム(HOG)特徴記述子は、オブジェクト検出でよく使用されます[1]

次の例では、HOG記述子を計算し、その視覚化を表示します。

アルゴリズムの概要#

方向勾配ヒストグラム (HOG) は、以下の手順で計算されます。

  1. (オプション)グローバル画像正規化

  2. xおよびy方向の勾配画像の計算

  3. 勾配ヒストグラムの計算

  4. ブロック間の正規化

  5. 特徴ベクトルへの平坦化

最初の段階では、照明効果の影響を軽減するために設計されたオプションのグローバル画像正規化均等化が適用されます。実際には、ガンマ(べき乗則)圧縮を使用し、各カラーチャネルの平方根または対数を計算します。画像テクスチャの強さは通常、局所的な表面照明に比例するため、この圧縮は局所的な影と照明の変動の影響を軽減するのに役立ちます。

2番目の段階では、一次画像勾配を計算します。これらは、輪郭、シルエット、および一部のテクスチャ情報をキャプチャし、照明の変動に対するさらなる耐性を提供します。ローカルで支配的なカラーチャネルが使用され、これにより、かなりの程度まで色不変性が得られます。バリアントメソッドには、二次画像導関数も含まれる場合があります。これは、プリミティブバー検出器として機能し、たとえば、自転車のバーのような構造や人間の四肢をキャプチャするのに役立つ機能です。

3番目の段階では、ポーズまたは外観の小さな変化に対して耐性を維持しながら、ローカル画像コンテンツに敏感なエンコーディングを作成することを目指します。採用された方法は、SIFT [2] 特徴と同じ方法で、勾配方向情報をローカルにプールします。画像ウィンドウは、「セル」と呼ばれる小さな空間領域に分割されます。各セルについて、セル内のすべてのピクセルにわたる勾配またはエッジ方向のローカル1次元ヒストグラムを累積します。この組み合わせたセルレベルの1次元ヒストグラムは、基本的な「方向ヒストグラム」表現を形成します。各方向ヒストグラムは、勾配角度範囲を predetermined bins. The gradient magnitudes of the pixels in the cell are used to vote into the orientation histogram.

4番目の段階では、正規化を計算します。これは、ローカルのセルグループを取得し、次の段階に進む前に、全体的な応答をコントラスト正規化します。正規化により、照明、影、およびエッジコントラストに対する不変性が向上します。これは、「ブロック」と呼ぶセルのローカルグループに対するローカルヒストグラムの「エネルギー」の尺度を累積することによって実行されます。結果は、ブロック内の各セルを正規化するために使用されます。通常、個々のセルは複数のブロック間で共有されますが、その正規化はブロックに依存するため、異なります。したがって、セルは最終出力ベクトルに異なる正規化で複数回表示されます。これは冗長に見えるかもしれませんが、パフォーマンスが向上します。正規化されたブロック記述子を方向勾配ヒストグラム(HOG)記述子と呼びます。

最後のステップでは、検出ウィンドウを覆う密な重複ブロックグリッドのすべてのブロックからHOG記述子を収集し、ウィンドウ分類器で使用する combined feature vector にします。

参考文献#

Input image, Histogram of Oriented Gradients
import matplotlib.pyplot as plt

from skimage.feature import hog
from skimage import data, exposure


image = data.astronaut()

fd, hog_image = hog(
    image,
    orientations=8,
    pixels_per_cell=(16, 16),
    cells_per_block=(1, 1),
    visualize=True,
    channel_axis=-1,
)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4), sharex=True, sharey=True)

ax1.axis('off')
ax1.imshow(image, cmap=plt.cm.gray)
ax1.set_title('Input image')

# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))

ax2.axis('off')
ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray)
ax2.set_title('Histogram of Oriented Gradients')
plt.show()

スクリプトの総実行時間:(0分0.677秒)

Sphinx-Galleryによって生成されたギャラリー