OpenCV (43): Shi-Tomas コーナー検出

1.Shi-Tomasコーナー検出原理

       Shi-Tomasi (Good features to Track) コーナー検出アルゴリズムは、Harris コーナー検出アルゴリズムに基づいて改良されたコーナー検出方法であり、いくつかの欠点に対処するために改良されました。

       Harris コーナー検出とは異なり、Shi-Tomasi はより単純化されたコーナー応答関数を使用します。コーナーポイントを評価するための基礎として、自己相関行列 M の小さい方の固有値 λmin が選択されます。

コーナー応答関数は、より小さい固有値です。

コーナーポイントの判定を図に示します。

  • λ1 と λ2 が両方とも λmin 未満の場合、それは平面領域です
  • λ1 と λ2 が両方とも λmin より大きい場合、それはコーナーポイントです
  • λ1 と λ2 のどちらか一方のみが λmin より大きい場合、それはエッジ領域です。

2. Shi-Tomas のコーナーポイント関数 GoodFeatureToTrack() の検出 

void cv::goodFeatureToTrack (InputArray 画像,

OutputArray のコーナー、

int maxCorners、

二重品質レベル、

最小距離を 2 倍にし、

InputArray マスク = noArray()、

int blockSize = 3、

bool useHarrisDetector =false、

ダブル k = 0.04

  • コーナー: 検出されたコーナーポイントの出力量
  • maxCorners: 検出されるコーナーポイントの数。
  • qualityLevel: コーナー ポイントのしきい値と最良のコーナー ポイントの間の関係 (品質レベルとも呼ばれます)。パラメーターが 0.01 の場合、コーナー ポイントのしきい値が最良のコーナー ポイントの 0.01 倍であることを意味します。
  • minDistance: 2 つのコーナーポイント間の最小ユークリッド距離
  • マスク: コーナーポイントが検出される領域を示すマスク行列。
  • blockSize: 勾配共分散行列のサイズを計算します。
  • useHarrisDetector: ハリスコーナーポイントを使用するかどうか
  • k: コーナー点のハリス検出時の一定重み係数

3. サンプルコード

void  Tomas_f(Mat mat){
    Mat gray;
    cvtColor(mat,gray,COLOR_BGR2GRAY);
    //提取角点
    int maxCorners=100;//检测角点数目
    double quality_level=0.01;//质量等级
    double  minDistance=0.04;//两个角点之间的最小欧式距离
    vector<Point2f> corners;
    goodFeaturesToTrack(gray,corners,maxCorners,quality_level,minDistance,Mat(),3, false);
    //绘制角点
    vector<KeyPoint> keyPoints;//存放角点的KeyPoint类,用于后期绘制角点时使用
    for(int i=0;i<corners.size();i++){
        //将角点存放在KeyPoint类中
        KeyPoint keyPoint;
        keyPoint.pt=corners[i];
        keyPoints.push_back(keyPoint);
    }
    //用drwaKeyPoints()函数绘制角点坐标
    drawKeypoints(mat,keyPoints,mat);
    imwrite("/sdcard/DCIM/mat.png",mat);
}

おすすめ

転載: blog.csdn.net/weixin_63357306/article/details/132895300