知覚ハッシュを使用して画像内のオブジェクトを検索する

画像






昼食時や仕事の後、自分でプログラミングをすることを信じていた当時、自分のスタートアップを作成できるので、1つのプロジェクトがありました。 また、プロジェクトは、画像内のオブジェクトを見つけるためにこのようなアルゴリズムを必要としていたため、新しいオブジェクト用にすばやくトレーニングでき、多くのコンピューティングリソースを消費しません。 知覚的ハッシュに関する記事(1 または2つの記事)を読んだ後、調査中の画像の領域の数を制限するためにそれを使用してみませんか? そして、彼はHaarの兆候を使う代わりに、自転車作り始めました 知覚ハッシュを画像領域のフィルターとして使用して、探しているオブジェクトがフィルター後に残っている可能性が最も高い領域のみを見つけます。 記事の最後に、OpenCVライブラリを使用したC ++コードへのリンクがあります。



最後に何が起こったのですか?









このビデオでは、動作中の画像内のオブジェクトを見つけるためのアルゴリズムの動作を見ることができます。 青い境界ボックスは、ビデオの再生が停止したときにビデオ内のオブジェクトを強調表示するために使用されます。 この場合、オブジェクトの外観を記憶できます。 アルゴリズムの学習は即座に行われます。 また、青い境界ボックスのサイズは、画像内のオブジェクト検索ウィンドウの最大サイズと最小サイズに影響します。 赤い境界ボックスは、ターゲットが配置される可能性が最も高い画像内の領域を強調表示します。 アルゴリズムは次のように機能します。





最後に、知覚ハッシュが画像領域を正確に制限しないため、問題が発生します。見つかった画像領域をオブジェクトの画像とともに保存することはできず、わずかなずれで大きな違いが生じます。 2つの画像でキーポイントを見つけて、それらを比較する方がより正確です。 さらに、2つの画像の比較中のパッチの通常の列挙により、アルゴリズムの動作が遅くなりますが、結果は「リアルタイム」と呼ばれる可能性があります。



パンダのビデオは、知覚ハッシュに基づく「フィルター」の操作を示しています。 赤い境界ボックスは、ハッシュが目的のオブジェクトのハッシュと一致する(または指定されたハミング距離内にある)画像の領域を示します。 残念ながら、このフィルタリング方法は、ビデオ内の小さなオブジェクトではうまく機能しません。 しかし、このアルゴリズムは、ラップトップのWebカメラから画像内の顔を検索するなど、大きなオブジェクトを操作する場合にはうまく機能します。







このアルゴリズムで知覚ハッシュを使用する機能



各画像を配列のインデックスとして表すことができるほど十分に大きなコンピューターメモリがある場合if条件があれば2つの画像の比較を行い、配列自体にこの画像が目的のオブジェクトに属していることを示すフラグを格納できます。



このアプローチは、知覚的ハッシュに適用するのが非常に現実的です。



イメージは配列のインデックスであるため、配列内のハッシュの検索に時間を費やす必要はありません。この配列要素(ハッシュ)が目的のオブジェクトクラスに属していることを確認するだけで十分です。 元の画像を準備する(それから積分画像を取​​得する)場合、ハッシュを計算するのに時間がかかりません。



通常、知覚ハッシュは、8 x 8ピクセルの画像サイズ、または64ビットのデータを使用します。 ただし、64データビットには非常に多くの組み合わせがあるため、配列はメモリを占有します(1.71E11 x セルサイズ )。 もう1つは、5 x 5ピクセルの画像を撮影する場合です。これは、2E25 = 33554432または少なくとも32メガバイトのメモリに相当しますが、これはまったく問題ありません。



ハミング距離ではなくノイズ



このアルゴリズムでは、目的のオブジェクトの画像の知覚ハッシュがハミング距離ではなく配列のインデックスであるため、知覚ハッシュと目的のハッシュの対応を評価するために、配列にフラグを事前に入力することができます。 ハミング距離にノイズを追加します。 これにより、計算量が削減されます。



→githubのプロジェクトはこちら



All Articles