SIFTのOpenCVインプリメンテーションでは、キーポイントの角度(180°〜180°)が角度によって表され、これらのキーポイントの計算された向きが表されます。 SIFTはヒストグラム内の10度ビンを使用してキーポイントの支配的な向きを割り当てるので、どのようにこの角度の範囲を得ることができますか?値は10度単位ではいけませんか?OpenCVインプリメンテーションにおけるSIFTオリエンテーション
ヒストグラムの平滑化のためですか?
これはkeypoint.angleに値が割り当てられているコードです。この値をどのように取得したかを理解するのに役立ちますか?
float omax = calcOrientationHist(gauss_pyr[o*(nOctaveLayers+3) + layer],
Point(c1, r1),
cvRound(SIFT_ORI_RADIUS * scl_octv),
SIFT_ORI_SIG_FCTR * scl_octv,
hist, n);
float mag_thr = (float)(omax * SIFT_ORI_PEAK_RATIO);
for(int j = 0; j < n; j++)
{
int l = j > 0 ? j - 1 : n - 1;
int r2 = j < n-1 ? j + 1 : 0;
if(hist[j] > hist[l] && hist[j] > hist[r2] && hist[j] >= mag_thr)
{
float bin = j + 0.5f * (hist[l]-hist[r2])/(hist[l] - 2*hist[j] + hist[r2]);
bin = bin < 0 ? n + bin : bin >= n ? bin - n : bin;
kpt.angle = 360.f - (float)((360.f/n) * bin);
if(std::abs(kpt.angle - 360.f) < FLT_EPSILON)
kpt.angle = 0.f;
keypoints.push_back(kpt);
}
}
:// CS。 stackexchange.com/ – EdChum
私はあなたが正しいと思います。通知のためにありがとうございます。 –
それはおそらく、記述子を記述するオリジナルの論文を読む価値があります。私の理解は、記述子はスケールと向きが不変であるが、記述子が同じフィーチャを記述しているかどうかを判断できるような角度を知っている – EdChum