2

チュートリアルのSURFプログラムを使用して、ビデオフレーム内のオブジェクトを検出しました。しかし、それはすべての重要なポイントと記述子を検出します。特定のオブジェクトのみを検出するようにプログラムを変更するにはどうすればよいですか?

CvSeq *imageKeypoints = 0, *imageDescriptors = 0;
int i;


CvSURFParams params = cvSURFParams(500, 1);
cvExtractSURF( image, 0, &imageKeypoints, &imageDescriptors, storage, params );
printf("Image Descriptors: %d\n", imageDescriptors->total);


for( i = 0; i < imageKeypoints->total; i++ )
{
CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, i );
CvPoint center;
int radius;
center.x = cvRound(r->pt.x);
center.y = cvRound(r->pt.y);
radius = cvRound(r->size*1.2/9.*2);
cvCircle( frame, center, radius, red_color[0], 1, 8, 0 );
}
4

1 に答える 1

3

このアルゴリズムは、すべての堅牢なキーポイントを検出することが想定されています。この種のアルゴリズムで特定のオブジェクトを検出する必要がある唯一の方法は、マーカー内のキーポイントを画像内のキーポイントと比較できるように、検出するオブジェクト(マーカーと呼ばれる)の画像を用意することです。一致するこれらのペアは、amrkerと画像で共通していることを意味します。

この方法を理解することが重要です。

1-検出したい画像のマーカーがあります。キーポイントを検出するには、SURF、FAST、SIFTなどのアルゴリズムを使用します。これはオフラインです。最初に1回だけ実行します。

2-ビデオからフレームの取得を開始し、フレームごとにSURFを使用して、ビデオのキーポイントを検出します。

3-ここに、マーカー内のポイントを画像内のポイントと「一致」させる実際の処理部分があります。オブジェクトと一致しない場合は、画像に含まれていません。

このを見てください。

于 2012-06-03T08:31:00.197 に答える