2

私はこれに慣れていません。私の異議は、ユーザーがイメージをデータベースにストレージとして保存するように実装する Web アプリケーションを構築することです。 .

したがって、必要なのは、データベースに既に保存されている重複または類似の画像を見つける方法、またはユーザーが最初のステップでそれをインポートしようとしたときにさらに良い方法であり、それらの画像が既にデータベースに保存されている画像と類似している場合です。データベースでは、システムはそのイメージを保存しないように警告することができます。

データベースの特定のディレクトリで類似または重複する画像を見つける方法を開発したいだけです。それを構築する方法について最初から説明してもらえますか。また、チュートリアルなどの基本的なステップからこれを達成するために何を学べばよいでしょうか。できれば、たくさん学びたいです。

事前に感謝します、私は本当にこの助けが必要です、ありがとう。

4

1 に答える 1

1

類似の画像を見つけるための解決策はもっと複雑なので、最初に重複した画像を見つけることに固執します。最も簡単な方法は、画像ビットの SHA1 ハッシュを取得することです。これを実現するための C# のコードを次に示します (以下を参照)。ハッシュをデータベースに格納する場合は、binary(20)データ型を使用してハッシュの結果を格納することをお勧めします。これにより、SQL サーバーは、このハッシュを文字列やその他の形式で格納するよりもはるかに高速にインデックスを作成してクエリを実行できます。

private static byte[] GetHashCodeForFile(string file)
{
    int maxNumberOfBytesToUse = 3840000;

    using (Stream sr = File.OpenRead(file))
    {
        byte[] buffer = (sr.Length > maxNumberOfBytesToUse) ? new byte[maxNumberOfBytesToUse]: new byte[sr.Length];

        int bytesToReadIn = (sr.Length < maxNumberOfBytesToUse) ? (int)sr.Length : maxNumberOfBytesToUse;

        sr.Read(buffer, 0, bytesToReadIn);
        System.Security.Cryptography.HashAlgorithm hasher = System.Security.Cryptography.SHA1.Create();
        byte[] hashCode = hasher.ComputeHash(buffer);
        return hashCode;

    }
}

類似の画像を検索することは、現在多くの研究が行われている難しい問題です。そして、それはあなたが類似をどのように定義するかに依存します。類似の画像を見つけるためのいくつかの有名な方法は次のとおりです。

  • 画像ファイルのメタデータ (EXIF など) タグで作成日を確認すると、類似した画像が類似した時期に撮影されている可能性があります。これは、あなたが望むものにとって最良のものではないかもしれません。
  • 両方のイメージの相対ヒストグラムを計算し、各カラー チャネルのデルタを比較します。これには、SQL クエリを記述できるという利点があり、画像サイズに対して不変です。サムネイルに変換された画像は、この方法で検索されます。
  • 2 つの画像間で画像減算を実行し、画像が純粋な黒 (すべてゼロ) にどれだけ近づくかを確認します。TSQL クエリでこれを行う方法を知りません。このコードは、サイズを変更する必要がある画像で扱いにくくなる可能性があります。
  • 画像の輪郭を (Sobel、canny、またはその他のエッジ検出器を使用して) 計算し、次に 2 つの画像を減算して、それらの輪郭がいくつ重複しているかを確認します。繰り返しますが、これは SQL で処理できるとは思いません。
于 2013-05-04T01:57:22.590 に答える