現在、画像の分類に使用する画像ライブラリを拡張しています。重複する画像、変換された画像、および他の画像を含む、または他の画像に含まれる画像を検索したいと思います。
OpenCVからのSIFT実装をテストしましたが、非常にうまく機能しますが、複数のイメージではかなり遅くなります。スピードが速すぎる他の多くの画像関連のメタデータがすでにそこに保持されているので、特徴を抽出してデータベースに保存できると思いました。
新しい画像の特徴をデータベースの特徴と比較するための最速の方法は何でしょうか?
通常、比較は、kd-trees、FLANN、またはSOの別のスレッドで見つけたPyramid Match Kernelを使用してユークリッド距離を計算することで行われますが、まだあまり調べていません。
データベース内のkdツリーを効率的に保存および検索する方法がわからないため、現在3つのオプションしか表示されていません。
*確かに、データベース内のすべてのフィーチャまでのユークリッド距離をMySQLに計算させます。数枚以上の画像には不当な時間がかかります。
*最初にデータセット全体をメモリにロードし、kdツリーを構築します。これはおそらく高速ですが、非常にメモリを消費します。さらに、すべてのデータをデータベースから転送する必要があります。
*生成されたツリーをデータベースに保存してすべてをロードするのが最速の方法ですが、新しいイメージの場合と同様に、kdツリーを再構築してサーバーに送信する必要があるため大量のトラフィックも生成します。
私はOpenCVのSIFT実装を使用していますが、完全に設定されているわけではありません。このタスクにより適した(そしてほぼ同等に堅牢な)特徴抽出器があれば、誰かが提案してくれればうれしいです。