ORBキーポイント検出器を使用しようとしていますが、SIFT検出器およびFAST検出器よりもはるかに少ないポイントを返すようです。
この画像は、ORB検出器によって検出されたキーポイントを示しています。
この画像は、SIFT検出ステージで検出されたキーポイントを示しています(FASTは同様の数のポイントを返します)。
このような少数のポイントがあると、画像全体で非常に貧弱な特徴照合結果が得られます。私は今のところORBの検出段階に興味がありますが、これは間違った結果が得られているようです。私はORB検出器をデフォルトのパラメーターと以下に詳述するカスタムパラメーターで使用してみました。
なぜそんなに大きな違いがあるのですか?
コード:
orb = cv2.ORB_create(edgeThreshold=15, patchSize=31, nlevels=8, fastThreshold=20, scaleFactor=1.2, WTA_K=2,scoreType=cv2.ORB_HARRIS_SCORE, firstLevel=0, nfeatures=500)
#orb = cv2.ORB_create()
kp2 = orb.detect(img2)
img2_kp = cv2.drawKeypoints(img2, kp2, None, color=(0,255,0), \
flags=cv2.DrawMatchesFlags_DEFAULT)
plt.figure()
plt.imshow(img2_kp)
plt.show()
このスレッドはかなり古いですが、これが同じ質問のある人に役立つことを願っています:
このパラメーターがFASTまたはHarrisにどのように渡されるかはわかりませんが、動作するようです。
それはRubleeらによって非常によく説明されています。彼らの論文「ORB:SIFTまたはSURFの効率的な代替手段」。私はそれをよりよく説明できるとは思わないので、ここに「2011 International Computer Conference on Computer Vision」の2565ページからの直接の引用があります:
FASTは角度の測定値を生成せず、エッジに沿って大きな応答があることがわかりました。 FASTキーポイントを注文するには、Harrisコーナーメジャー[11]を使用します。キーポイントのターゲット数Nの場合、最初にN個を超えるキーポイントが得られるようにしきい値を低く設定してから、Harrisメジャーに従ってそれらを順序付け、上位Nポイントを選択します。