私は(できれば簡単で高速な)画像ハッシングアルゴリズムが必要です。ハッシュ値はルックアップテーブルで使用され、暗号化には使用されません。速く簡単な画像ハッシングアルゴリズム
画像の一部は、実線で塗りつぶされた矩形、ラスタライズされたテキストなどですが、妥当なノイズ振幅で、豊かな色のスペクトル、主に滑らかな画像も含まれています。
また、特定の画像部分にハッシュアルゴリズムを適用できるようにしたいと思います。つまり、イメージはグリッドセルに分割でき、各セルのハッシュ関数はこのセルの内容にのみ依存する必要があります。 2つの画像に共通の領域がある場合(適切に配置されている場合)、すばやく検出することができます。
注:私は2枚のだけの画像(またはその一部)が同じあるかどうかを知る必要があります。つまり、類似の画像に一致させる必要はなく、フィーチャー認識、相関、その他のDSP技術は必要ありません。
好きなハッシュアルゴリズムは何ですか?
グリッドセル内のすべてのピクセルを単にXORする「写真」画像の場合は、多かれ少なかれです。異なる画像に対する同じハッシュ値の確率はかなり低く、特に(ほぼ白色の)ノイズの存在がすべての潜在的な対称性を壊すためです。さらに、そのようなハッシュ関数のスペクトルはよく見えます(ほぼ同じ確率で任意の値が可能です)。
しかし、このような単純なアルゴリズムは、「人工的な」グラフィックスでは使用できません。同一ピクセル、繰り返しパターン、幾何学的オフセット不変性は、そのような画像には非常に一般的です。すべてのピクセルをXORすると、同じピクセルの偶数の画像に対して0が与えられます。
CRT-32のようなものを使用すると若干有望に見えますが、もっと速く何かを見つけたいと思います。私は、このオプションに傾いてるようモジュロ素数を行う
hashValue = (hashValue * /*something*/ | newPixelValue) % /* huge prime */
おそらく、良好な分散を与える必要があります。私は、新しい各ピクセルは、このような現在のハッシュ値が、変異し、反復式を考えました。しかし、私はより良いvariansがあるかどうかを知りたいです。
ありがとうございます。
なぜmd5のような平易なハッシュアルゴリズムを使用しないのですか? –
@Karoly Horvath:良い質問です。確かにこれは私が必要とするものです。しかし、MD5は(恐らく)CPUを必要としているので、一方向のハッシュ関数であるように設計されています。 OTOH私はセキュリティの考慮事項がないので、もっと簡単なものが必要です。私はCRC-32について考えています。しかし、もっと単純なものを見つけたいと思っています – valdo
多くの画像でこれを行うと、ボトルネックはディスクの速度になります。 –