2016-05-18 12 views
1

私はknnMatchを使って画像のキーポイントにマッチします。私のマッチカウントは通常10,000以上ですので、knnMatchは実行に多くの時間がかかります。現在実行中のディレクトリ内のすべての画像に対してこれを行う必要がありますforループを使用します(それぞれ約15枚の画像がある場合、ループ実行には約30分かかります)。時にはプログラムが殺されることもあります。代わりにknnMatchにマルチスレッドを使用して、すべての画像が同期して一致するようにしてから、最高のinlierを選択してステッチすることができますか?その場合、私は別のスレッドから同じ変数に書き込むことができないので、どのように各一致のinlierを保存するのですか?異なるスレッドの異なるイメージに対してknnMatchを実行することは可能ですか?

マルチスレッドが実行可能なオプションでない場合、私がやっていることをスピードアップするための選択肢がありますか?

+0

こんにちは。通常、2つの画像に一致するキーポイントを少なくすると、パフォーマンスを大幅に向上させることができます。あなたは各画像に多くのキーポイントを使用しています。なぜ、各画像で検出されたキーポイントの数を制限しないのですか? – zedv

+0

ねえ、どうすればいいですか?私は現在KAZEを使用しています。キーポイントの数を制限する方法はありますか? – Slay

+0

"代わりにマルチスレッドを使用することはできますか?" - 並列化は、アルゴリズム設計が貧弱で魔法的な治療法ではないだけでなく、足に自分自身を撃つ多くの微妙な方法を伴う重要ではない話題です。それを学び、あなたは簡単な問題から始めて、自分のやり方で作業しなければなりません)。高価なハードウェアを使用すると、大きなオーダーが得られるかもしれませんが、それはあなたのアプローチをはるかに実用的にしません。シングルスレッドのパフォーマンスを最適化することに重点を置いてください。 –

答えて

1

だけのチューニングKAZE検出器のしきい値

cv2.KAZE_create() 

この場合、検出器は、閾値= 0.001(デフォルト値)を持つことになります。この場合

cv2.KAZE_create(threshold=0.01) 

が検出されますデフォルト値を使用するよりもポイントが少なくなります。


あなたの画像を100×100にしたい場合は、例えば、:)

を使用している画像のサイズを縮小することになる結果に影響を与えることなく、パフォーマンスを向上させるもう一つの方法:

resized_image = cv2.resize(image, (100,100)) 

ドキュメント: http://docs.opencv.org/3.0-beta/modules/imgproc/doc/geometric_transformations.html#void resize(InputArray src、OutputArray dst、Size dsize、double fx、double fy、int内挿)

+0

opencvで画像のサイズを小さくするには? – Slay

+0

が応答に追加されました – zedv

関連する問題