私は類似した画像のためにmemoizationシステムを開発しています。私はこの質問を2つの副題で分けます。一つは次のステップですから、もっと適切だと思うなら2つの異なる質問を投稿することができます。類似の画像を持つC++の画像ハッシング機能
知って最初にすること:私はこの貧しい男と優しくしてください、画像処理について何も知らないしません:)
問題の説明
我々が取る機能ReturnType foo(Image)
を持っていますそれは時間がかかりますが、何かが返されます(アプリケーションに依存します)。私が設計しているmemoizatorはunordered_map<ImageHash,ReturnType>
(または同等の構造)なので、ユーザーが同じ画像を2回送信すると、既に計算されたReturnType
の値が直接返されます。私は
必要なもの
あなたが想像できるように、私はいくつかのHashFunction
S。T.が必要HashFunction(Image)=ImageHash
(ImageHash
は高い確率でユニークです)。
このImageHash
は、実行、マシン、時間に依存しないことに注意してください。これは、unordered_map
がファイルにシリアル化されるため(異なる実行で使用できるため)、他のユーザーと共有されるためです。
パフォーマンスが本当に重要なので、高速のハッシュ関数が有効です。
私はこのトピックについてthis questionを見つけましたが、著者は画像に多くの制約をもたらしました(中毒では良い解決策はありません)。
注:画像には制約がありませんので、お好きなソリューション(提案する画像のセットを含めることができます)を提案できます。
注:はSHA-1可能な解決策ですか?私はそれが可能イメージのためにそれを使用する場合、私は知らない(と、それはC++の実装が存在する場合)
を次のステップは
が、私は以前のソリューションを拡張したいと思い、文字列のみのためにそれを使用しましたしたがって、類似の画像についても同じ結果が返されます。従って、正式には、Image image2
と同様のImage image1
が与えられた場合、(image1,result)
または (image2,result)
がすでに計算されている場合、image1
のシステムはReturnType result
を返します。
私はphashについて聞いたことがありますが、それがこの目的に適しているかどうかはわかりません。
md5は、この種のもののための一般的なハッシュアルゴリズムです。ハッシュコードを使用して同様の画像を照合する限り、それはうまくいくとは思わない - ハッシュコードは、それらを生成するために使用される正確なバイトシーケンスに非常に依存しており、私の知る限りでは不正確性をテストするためにそれらを使用する。 –
@JeremyFriesnerだからsha-1もいいです:) – justHelloWorld