問題タブ [flann]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - FLANN と大きな HDF5 ファイル
大きな hdf5 ファイル (寸法 1kk x 1k) で flannを使用しようとしています。
しかし、flann_example.cpp の関数ではすべて失敗します
オンライン
大きなメモリチャンクを割り当てたいようですnew
2Gbのwin32を使っていますが、そのようなビッグデータを処理する方法はありますか?
私もpythonで試しました
makefile - FLANN コンパイル (cygwin)
WindowsでFLANNライブラリを構築しようとしていますが、cygwinがインストールされています。
私が使用cmake ..すると、cygwinとgccコンパイラが使用されているようです。
そして、nmake動作しません。
python - 複数の画像の OpenCV 機能マッチング
FLANN を使用して多くの画像の SIFT 特徴マッチングを最適化するにはどうすればよいですか?
Python OpenCV docs から取った実際の例があります。ただし、これはある画像を別の画像と比較しており、遅いです。一連の画像 (数千枚) で一致する機能を検索する必要があり、高速化する必要があります。
私の現在の考え:
- すべての画像を実行し、機能を保存します。どのように?
- カメラからの画像をこの上のベースと比較し、正しいものを見つけます。どのように?
- 結果、一致する画像などを教えてください。
アップデート
多くのことを試した後、私は今解決に近づいたかもしれません。インデックスを作成して、次のように検索できることを願っています。
ただし、受け入れられた npArray を flann_Index パラメータに構築することはまだできていません。
opencv - OpenCV: FLANN モジュールでは、KDTree コンストラクターが同じサイズの 4 つのツリーを作成します。なぜ?
FLANN モジュールでは、KDTree コンストラクターがツリーを作成するための構成パラメーターを受け取ります。デフォルト値は 4 です。最近傍探索に 4 つ以上のツリーが必要な理由を教えてください。
c++ - C++ / OpenCV - フラン インデックス マッチングとフラン マッチングの違い
を使用して、より深いレベルの機能マッチングを理解しようとしてFLANNいますが、インデックスを使用する場合と使用しない場合の 2 つの使用可能なアプローチがあるようです。
インデックスを使用したSOマッチングに関する質問は次のとおりです。opencv flann::Index の使用方法?
FLANN
そして、これは指標
FLANN なしでのマッチングの例です: https://github.com/Itseez/opencv/blob/master/samples/cpp/matching_to_many_images.cpp
もちろん、コードの違いはわかりますが、あるアプローチを使用する利点が他のアプローチよりも優れていることを理解しようとしています。データベースでは、多くの場合、インデックスを追加するとパフォーマンスが向上します。機能を一致させるために使用する場合、それは類似してFLANNいますか???
誰もこれについて経験がありますか?
c++ - 異なる結果を返すFlannBasedMatcher
OpenCV で を使用するFlannBasedMatcherと、同じパラメーターでマッチャーを呼び出すと、異なる結果が得られます。誰かが私が間違っていることを提案できますか?
以下のコードは、私が抱えている問題の最小限の例を示していますFlannBasedMatcher.
ループのたびに出力される結果は同一である必要がありますが、そうではありません。
出力は、役に立たないと思いますが(?)、
c++ - FLANNマッチングを利用したOpenCV SIFTで一覧から画像を認識する
アプリケーションのポイントは、既に設定されている画像のリストから画像を認識することです。画像のリストには、SIFT 記述子が抽出され、ファイルに保存されています。ここで興味深いものは何もありません:
次に、デバイスが写真を撮ります。SIFT 記述子も同様に抽出されます。ここでのアイデアは、記述子をファイルの記述子と比較することでした。私は OpenCV の FLANN マッチャーを使用してそれを行っています。画像ごとに類似性を定量化しようとしています。リスト全体を調べた後、最適な一致が得られるはずです。
マッチング後、特徴ベクトル間で見つかった最も近い距離のリストを取得することがわかりました。最小距離を見つけ、それを使用して「適切な一致」をカウントし、それぞれのポイントのリストを取得することもできます。
これをより簡単に理解できるようにするために、コードの簡単な部分を示しています。一部はここにある必要がないことはわかっています。
続けて、このように適切な一致の数を数えるだけで十分だと思っていましたが、ほとんどの場合、記述子が最も多い画像を指すだけでした。この後に私が試みたのは、ホモグラフィの計算でした。目的は、それを計算して、有効なホモラフィかどうかを確認することでした。良い一致だけが、良い変換であるホモグラフィーを持つことが期待されていました。ホモグラフィの作成は、std::vector< cv::Point2f>であるobjとシーンでcv::findHomographyを使用するだけで行われました。オンラインで見つけたコードを使用して、ホモグラフィの有効性を確認しました。
この背後にある数学を理解していないので、テスト中に、この関数をホモグラフィの行列式が正であるかどうかの単純なチェックに置き換えることがありました。問題は、ここで問題が発生し続けたことです。同形異義語は、すべて悪いか、そうであってはならないときに良いものでした (行列式だけをチェックしていたとき)。
私は実際にホモグラフィを使用し、多くのポイントについて、ソース画像での位置を使用して宛先画像での位置を計算する必要があると考えました。次に、これらの平均距離を比較します。理想的には、正しい画像の場合、平均距離が非常に明らかに小さいことが理想的です。これはまったく機能しませんでした。すべての距離は巨大でした。正しい位置を計算するためにホモグラフィを逆に使用したのではないかと思いましたが、objとシーンを相互に切り替えると、同様の結果が得られました。
私が試したその他のことは、SIFT の代わりに SURF 記述子、FLANN の代わりに BFMatcher (ブルート フォース)、最小距離に応じた数値の代わりにすべての画像のn 個の最小距離を取得すること、またはグローバルな最大距離に応じて距離を取得することでした。これらのアプローチはどれも明確な良い結果をもたらしませんでした。
私の唯一の次の戦略は、画像を鮮明にするか、またはセグメンテーションに使用されるいくつかのローカルしきい値またはアルゴリズムを使用してバイナリ画像に変換することです. 私の仕事で誰かが見ることができる提案や間違いを探しています。
これが関連しているかどうかはわかりませんが、これをテストしている画像をいくつか追加しました。多くの場合、テスト画像では、ほとんどの SIFT ベクトルが絵画よりもフレーム (コントラストが高い) に由来します。これが、画像を鮮明にすることがうまくいくと考えている理由ですが、以前に行ったことが間違っている場合に備えて、深く掘り下げたくありません。
画像のギャラリーは、タイトルの説明とともにここにあります。かなり解像度の高い画像ですので、参考になればと思います。
python - 「kmeans」パラメータが渡されると、pyflannはubuntuの最近傍の負のインデックスを返します
ゴール
私は取得しようとしています:
- おおよその最近傍ライブラリ FLANN、および
- Python バインディング pyflann
Ubuntu を実行している AWS ec2 インスタンスで正しく動作します。私の目的は、FLANN を他の ANN 実装 (ANNOY や scikit-learn ANN 実装など) と比較して、どちらが私が働いている会社に最適かを確認することです。次元が 500 までの数百万のベクトルを扱っています。
このため、代替の ANN 実装の提案を受け取るよりも、FLANN 自体を機能させることが重要です。Radim Rehurekの素敵なブログ投稿は知っていますが、さまざまな ANN アルゴリズムのパフォーマンスを確認したい具体的なデータ セットがあるため、彼のブログは私たちが独自にベンチマークする必要性を排除しません。データ。
問題
私は flann と pyflann の両方のバージョンをインストールすることに成功しましたが、「kmeans」パラメーターを使用して ANN インデックスを作成するように求められたときに、pyflann は意味のない結果を返します。たとえば、次の Python コードとその出力を考えてみましょう。
次の行から:
"testset" 内の 10 個の 100 次元ベクトルのそれぞれに対して 5 つの近傍を求めている場合、出力された配列は正しい次元を持ちます: 10 行は "testset" 内の 10 個のベクトルに対応し、各行の長さは 5 であり、事実を反映しています。私は5人の隣人を求めました。ただし、エントリの値は正しくありません。一部のエントリは負であり、多くのエントリは範囲 0 ~ 999 (考えられる最近傍のインデックスの範囲) の外にあるためです。比較のために、「kmeans」のみを「kdtree」に変更して、上記とほぼ同じコードを使用した私の端末の出力を次に示します。
今回は、期待どおり、すべてのエントリが 0 から 999 までの非負の整数です。もちろん、データはランダムに生成されるため、結果はさまざまですが、"kmeans" 引数を使用すると一貫してばかげた結果が生成されますが、"kdtree" は一貫して適切な結果が生成されます。
ソフトウェアとOSの詳細
(0) Ubuntu ディストリビューション:
Ubuntu 14.04 LTS
(1) libflann-dev:
タイピング:
sudo aptitude show libflann-dev
プロデュース:
(2)入力:
sudo aptitude show python
生成:
インストール方法
最初に、次のコマンドで FLANN をインストールしようとしました。
pyflann をインストールした後:
私が入力した:
エラーメッセージを受け取りました:
次に、新しい ec2 インスタンスで、次のように入力しました。
そして走った
文句なし。ただし、上記の「kmeans」の問題があります。
ノート
私は自分の MacBookPro に FLANN と pyflann をインストールすることに成功しました。すべて正常に動作します。最近傍クエリ引数として "kmeans" を使用しても、適切な結果が得られます。