HOGは---勾配方向の素人高く評価ヒストグラムが特徴

勾配方向ヒストグラムを
元のパス:https://www.learnopencv.com/histogram-of-oriented-gradients/

HOG特徴を使用したときにナンバープレートを識別するために、サンプルを訓練するとき最近、ナンバープレート認識に従事。私は、外国の記事を本当に感謝します

特徴記述子は何ですか?
これは有用な情報と廃棄無関係な情報を抽出することにより、画像または画像の一部を表す特徴量記述を指し

典型的には、特徴記述子のサイズ。特徴ベクトル配列、長さNに3×横×高さ(チャネル)画像。例えば:HOG特徴記述子の場合、入力画像サイズは64×128×3、前記出力ベクトルの長さは3780です。


梱包のプロセスサイクルの途中が
(これらのパラメータは固定されていないが、推奨されている、請求8x8,9)ボックス9にサイズ8×8パッチ画像処理装置のブロックに分割されている
モバイルステップ:8つのピクセル
幅: 64 / == 8部8
の高さ:8分の128 == 16部
の16×16のウィンドウで処理し、パッチを4枚の8×8の画像を含んでもよく、処理時間は、データ取得4つの* 9ボックスであろう。ループ処理
周期15 * 7 = 105時間まで、最終的にできる
データの105 = 3780 * 36ボックスは、各画素の勾配方向と勾配の大きさを保存
]

HOG記述子は、他のサイズを用いて計算することができ、覚えておいてください、しかし、あなたは画像の幅と高さを使用することを選択した概念を理解しやすいようにするために、以下の具体的な例では:ステップ8×8ウィンドウ16X16を動かす64×128、パッチ画像8つのピクセル

まずは、「有益な情報」とは何であり、「無関係な情報は、」何であることを理解しましょうか?私たちは何のために有用まさに「便利」な手段を知っている必要があります。
役に立たない画像特徴ベクトルを参照してください、しかし、これらのタスクのための画像認識や物体検出は非常に便利です。特徴ベクトル生成されたこれらのアルゴリズムは、サポートベクターマシン(SVM)分類アルゴリズムを画像に導入されるなど、良好な結果を達成することができます。

しかし、それは本当に便利親切分類タスクの「署名」のは何ですか?のは、このことを議論するために例を使用してみましょう。私たちはケリシャツと上着を検出する物体検出器を構築するとします。ボタン(画像に楕円現れ得る)円形であり、通常縫製するためのいくつかの穴を有しています。あなたは、単にそれがボタンである場合は、容易に判断することができ、画像のエッジを観察することによって、ボタンの画像にエッジ検出を実行することができます。この場合、エッジ情報ではなく、色情報より、「有用」です。また、この機能は、特定する能力が必要です。例えば、画像特徴から抽出されたあなたは良いボタンや、コインなどの他の丸い物体、および車のタイヤの違いを区別することができるはずです。

HOG特徴記述子は、特徴として、勾配方向の分布(勾配)(ヒストグラム)。勾配画像(xおよびy誘導体)勾配(強度変化の急激な領域)の大きさが縁、角に大きいために有用である、と我々はもう少し平面領域よりも対象物の形状で、その側面と角度情報を知りますそしてより多くの。

勾配ヒストグラムの方向を計算する方法は?
このセクションでは、計算HOG特徴記述子の詳細について掘り下げます。各ステップを説明するために、我々は、画像ブロックを使用します。

ステップ1:前処理

HOG特徴記述子歩行者検出のために上述したように、64×128スライス画像において計算されます。もちろん、画像を任意のサイズであってもよいです。画像内の複数の位置の分析は、一般に、スケールの数であり、唯一の制限は、固定された縦横比(アスペクト比)を有するパッチを分析します。2:この例では、パッチの必要性は、1のアスペクト比を持っています。例えば、それらは、128×256、×2000の代わりに、101×205 1000、100×200であってもよいです。

これを説明するために、以下に示し大きなサイズの720×475の画像。私たちは、HOGは、ディスクリプタ選択ブロックサイズ100×200を備えて計算します。このパッチは、64×128に画像やリサイズをトリミング。今HOGパッチの画像記述子を計算する準備が整いました。

書き込み絵は、ここで説明しました

そこ前処理工程「ガンマ補正」ですが、パフォーマンスは、このステップをスキップされ、その結果、非常に小さいです。

ステップ2:画像勾配を計算します

HOG記述子を計算するために、我々は最初の必要性は、水平および垂直方向の勾配を計算するために、すべての後、我々は勾配ヒストグラムを計算する必要があります。これを行うには、カーネルで簡単にフィルタリングされた画像によります。
書き込み絵は、ここで説明しました

私たちは、同じ結果を達成するためにOpenCVのカーネルサイズのSobel 1演算子を使用することができます。

    // Read image
    Mat img = imread("F:/data/car/test1.jpg");
    img.convertTo(img, CV_32F, 1 / 255.0);

    // Calculate gradients gx, gy
    Mat gx, gy;
    //对X梯度绝对值
    Sobel(img, gx, CV_32F, 1, 0, 1);
    //对Y梯度绝对值
    Sobel(img, gy, CV_32F, 0, 1, 1);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

次に、我々は、勾配の大きさと方向を見つけるために次の式を使用することができ

書き込み絵は、ここで説明しました

もしOpenCVのを使用している場合、以下に示すように、使用することができるcarttopolar勾配関数の大きさと方向を計算します。

    Mat mag, angle;
    //mag 坡度梯度 大小
    //mag就是大小 
    //angle就是方向
    cartToPolar(gx, gy, mag, angle, 1);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

次の図に示す勾配

書き込み絵は、ここで説明しました

図は、水平方向に延びる図Y-勾配を垂直方向に延びる直線勾配Xのことに注意してください。強度の急激な変化を有する図スロープ勾配。画像領域を平滑化するとき、それが拡張されていません。画像があまりにも多くの情報を伝えない方向として表示されているので、私は意図的に、画像の階調表示方向を残しました。

画像の変化に注意してください
非必須情報(例えば、一定の色の背景)の数に加えて、階調画像を、しかし輪郭を強調しました。言い換えれば、あなたは画像階調を見て、簡単に人はそこにある絵を識別することができます。

図のx勾配が略水平方向に延びていないことに注意
図垂直方向yの勾配が実質的にない延びることに注意してください

書き込み絵は、ここで説明しました

ステップ3:計算8×8セルの勾配ヒストグラム

このステップでは、画像は8×8セルに分割され、勾配ヒストグラムは、各8×8セルに対して計算されます。

書き込み絵は、ここで説明しました

私たちは、インスタントヒストグラムに学びますが、私たちは行く前に、我々は8×8のセルに画像を入れて、なぜ私たちが最初に理解してみましょう。機能記述子を使用するための重要な理由は、画像パッチは、それがコンパクトな表現を提供することであるについて説明します。8×8の画像パッチは、8x8x3 = 192の画素値を含みます。パッチは、画素勾配値(大きさと方向)ごとに2つ含まれ、それは8x8x2 = 128の数となります。最後に、我々は、9ビンのヒストグラムである(ボックス9に取り付け口語それぞれ、長さ9の配列として格納されていてもよい)128数のこの部分によって表される参照します。パッチヒストグラムで計算より簡潔には、より強力な堅牢性を持っているだけでなく。個々の色のグラデーションはノイズであるが、勾配ヒストグラムを表すために8×8の画像パッチと他の言葉で、それはノイズの影響を受けず、ノイズに敏感ではないことができます。

但是什么是8x8图像补丁?为什么不是32x32?这是我们通过特征缩放来寻找到的明确的选择。HOG最初用于检测行人。在一张行人照片缩放到64×128,使用8×8细胞足以捕捉有趣的功能(如面部、头部的等)。

让我们看一个8×8补丁在图像梯度的面貌

書き込み絵は、ここで説明しました

中间的图像信息量是非常大的。它显示了用箭头表示梯度的图像的贴片,箭头显示梯度的方向,其长度显示大小。注意箭头的方向如何指向强度的变化方向,其大小表示差异的大小。

在右边,我们看到原始的数字表示在8×8细胞有一个小的差异,那就是角度是0度和180度的梯度,而不是0到360度之间。这些被称为“无符号”渐变,因为梯度正值和它的负值用相同的数字表示。换句话说,梯度箭头和与之相对的180度箭头被认为是相同的。但是,为什么不使用0 - 360度呢?经验表明,无符号梯度比签名梯度更好地用于行人检测。HOG的一些实现将允许您指定是否使用带符号的渐变。

下一步是创建一个8×8细胞梯度直方图。直方图包含9个箱子对应角度0, 20, 40…160。

下图说明了这个过程。我们正在前面的图寻找在同8×8补丁梯度的幅值和方向。根据方向选择箱子,并根据大小选择投票(进入箱子的值)。让我们首先关注环绕在蓝色中的像素。它的角度(方向)为80度,大小为2。所以它放入到第五个箱子。用红色包围的像素的梯度方向为10度,大小为4。由于10度是0和20之间的一半,所以像素的也是均匀地分成两个箱子。

書き込み絵は、ここで説明しました

还有一个细节需要注意。如果角度大于160度,则在160到180之间,我们知道角度绕成0和180相等。因此,在下面的例子中,角度为165度的像素正比于0度的箱子和160度的箱子。
从160-180
180-165/165-160=3
所以0箱子分4/1,160箱子分4/3

在8×8细胞中所有像素的贡献加起来创造9-bin直方图。对于上面的补丁,它看起来像这样

書き込み絵は、ここで説明しました

在我们的表示中,y轴是0度。你可以看到直方图在0度和180度附近占很大比重。

書き込み絵は、ここで説明しました

步骤4:16x16步块归一化

在前面的步骤中,我们根据图像的梯度创建了一个直方图。图像的梯度对整体亮度是敏感的。如果通过将所有像素值除以2来使图像变暗,则渐变幅度将改变一半,因此直方图值将改变一半。理想情况下,我们希望描述符不受光照变化的影响。换句话说,我们希望使直方图正常化(归一化),这样它们不会受到光照变化的影响。
在解释直方图是如何规范化之前,让我们看看长度为3的向量是如何规范化的。
書き込み絵は、ここで説明しました

例如:一个像素向量RGB【128,64,32】,向量的长度则为:sqrt{128^2 + 64^2 + 32^2} = 146.64
这也被称为向量的L2范数。将向量的每一个元素除以146.64得到归一化向量【0.87,0.43,0.22】,可以看到,归一化后的【256,128,32】将得到【0.87,0.43,0.22】可以看到归一化向量消除了规模。

现在我们知道了如何归一化一个矢量,你可能会认为在计算HOG特征时可以将9x1的直方图以上述的3×1矢量的方式归一化。可以是可以,但更好的办法是归一化一个更大尺寸的16×16块。16×16块用4个直方图可级联成一个36×1元矢量,使用3×1矢量归一化的方法。然后通过8像素的窗口移动(见动画)重复计算,归一化的36×1向量。

步骤5:计算HOG特征向量

最終的に画像全体が36×1ベクトルは、巨大なキャリアに連結した、特徴ベクトルパッチを算出します。このベクトルの大きさは、数ありますか?
*画像200- 100> resize-> 128 * 64取ら
/ 64。8. 8 =
128/16 = 8
。1、我々は、16×16ブロック番号を持っていますか?七つの水平および垂直位置15、7×15 = 105ブロックの合計。
図2に示すように、各ブロックは16×16 36×1のベクトルを表します。私たちは、大きなキャリアに接続するときに、彼らは36×105 = 3780次元のベクトルとなっています。

勾配方向ヒストグラムの可視化

書き込み絵は、ここで説明しました

HOGは9×1 8×8の組織正規化ヒストグラムの可視化により、典型的には、タイル記述子を特徴とします。上の画像を参照してください。あなたは、特に胴体と脚周り、その支配的な方向ヒストグラムキャプチャの人々の形状に気づくでしょう。
残念ながら、OpenCVのHOG記述子を視覚化する簡単な方法はありません。

この時点で:翻訳は、英語能力、間違った場所が限定され、完了した翼を期待しています。

リリース元の4件の記事 ウォンの賞賛8 ビュー9116

おすすめ

転載: blog.csdn.net/u012254599/article/details/103857478