私は時々この用語を聞いて、それが何のために使われているのか疑問に思っていますか?
ハッシング は、任意のデータに適用され、固定サイズ(ほとんどの場合非常に小さいサイズ)のデータを生成する関数です。ハッシュにはさまざまな種類がありますが、画像ハッシュについて話している場合は、次のいずれかの目的で使用されます。
私たちと同じように見える画像は、生のバイトを比較するだけであれば、大きく異なる場合があります。これは次の原因が考えられます。
1バイトだけ異なる画像を見つけたとしても、ハッシュ関数を適用すると、結果が大きく異なる可能性があります( MD5、SHA などのハッシュの場合、おそらく完全に異なる)。
そのため、同様の画像に対して同様の(または同一の)ハッシュを作成するハッシュ関数が必要です。一般的なものの1つは locality sensitive hashing です。しかし、画像にどのような問題が発生するかはわかっているので、 より特殊な種類のハッシュ を見つけることができます。
最もよく知られているアルゴリズムは次のとおりです。
ところで、pythonを使用する場合、これらのハッシュはすべて this library で既に実装されています。
通常、ファイルのハッシュはファイルのデータの個々のビットをハッシュしますが、画像のハッシュは少し高いレベルで機能します。違いは、画像ハッシュでは、2つの画像が実質的に同一に見えてもフォーマットや解像度が異なる場合(または、おそらく圧縮による小さな破損がある場合)、同じ数にハッシュする必要があることです。データの実際のビットはまったく異なりますが、それらが実際に人間とまったく同じに見える場合、同じものにハッシュされます。
これの1つのアプリケーションは検索です。 TinEye.comを使用すると、画像をアップロードして、インターネットでその発生の多くを見つけることができます。グーグルのように、ウェブページをクロールして画像を探すウェブクローラーがあります。次に、これらの画像をハッシュし、ハッシュとURLをデータベースに保存します。画像をアップロードすると、ハッシュが計算され、データベース内のそのハッシュにリンクしているすべてのURLが取得されます。 TinEyeの使用例には、高解像度バージョンの写真の検索や、誰かの公開Facebook/myspace /などの検索が含まれます。写真からのプロファイル(これらのプロファイルが同じ写真を使用すると仮定します。
また、画像ハッシュをキャッシュまたはローカルストレージで使用して、それぞれ写真の再送信または複製のストレージを防ぐことができます。
画像認証やビデオ内の類似フレームの検索など、他の多くの可能性があります(他の誰かが言及したように)。
ハッシュは、一般的に、大量のデータをその画像を識別するために使用できる短い(ish)数に減らすための便利な方法です。
特に重複しないマスターカウンター(JPG001 JPG002)のインクリメントに依存できない複数の並行作成者が存在する場合、特に、人間の介入なしにファイルを識別する便利な方法を提供することを目的としています。
時々、ハッシュは偽造できないように意図されているので、私が言うことができる-あなたが生成する画像ハッシュがあなたに画像を送ったときに作ったものと同じなら、あなたはそれが私からのものであることを確信できます(そして悪人によって調整されていない) )。ただし、すべてのハッシュがこの保証を行うことができるわけではありません。数年ごとに、このような「暗号化」ハッシュが致命的な欠陥を持つことが示されています。
実際には、画像ハッシュは、一連のフレームまたはビデオで同様の画像を見つけるため、または多くの映画スタジオが現在行っているようにさまざまな画像に透かしを埋め込むために人気があります(ほとんど不気味な意味でFight Clubに耳を傾けます!)。