限られた経験に基づいて、このタイプの問題に遭遇した他の人のために3つの推奨事項があります。
1)MathieuLabbéによるFindObjectの実験
これは非常に優れたツールであり、機能の検出/説明のための設定の適切な組み合わせを見つけるためにすばやく実験するのに役立ちました。アイコンをオブジェクトとしてロードし、サンプルの大きな画像をシーンとしてロードするだけです。次に、アプリケーションで信頼できる結果が得られるまで微調整します。ボーナスとして、彼は最近、BRISKおよびFREAKの特許に抵触しない機能の検出/記述方法を追加しました。
2)現実的な解像度を得る
解像度は、検索している大きなシーンのアイコンオブジェクトと実際のアイコンで大きく異なります。私の理解では、これらのメソッドのスケール不変性は実際にはかなり制限されています。IevgenKhvedcheniaによって行われた優れた比較をチェックしてください。画像のサイズを予想する範囲の中央に変更すると、より良い結果が得られる場合があります。
3)アイコンのサンプル画像をよりリアルにします(たとえば、ぼやけた)
#2に関連して、より現実的なシーンで検索するときに非常に鮮明なサンプル画像を使用してもうまく機能しないことがわかりました。シャープなサンプルにガウス関数を適用して、期待するものに近づけます。以下に例があります。奇妙な式は、カーネルの次元が必要に応じて奇数であることを保証するだけです。
def proportional_gaussian(image):
kernel_proportion = 0.005
kernel_w = int(2.0 * round((image.shape[1]*kernel_proportion +1)/2.0)-1)
kernel_h = int(2.0 * round((image.shape[0]kernel_proportion +1)/2.0)-1)
return cv2.GaussianBlur(image, (kernel_w, kernel_h), 0)
それが誰かを助けることを願っています。