4

私は機能検出について読んでいて、ハリスコーナー検出器を試してみたかった. 私はそれが呼び出すことによって達成されることを理解しています

void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType=BORDER_DEFAULT )

ここで、dst は各ピクセルのコーナー強度を含む float のイメージです。

私はそれが機能することを確認したかったので、次の図に適用したいと思いました。

ラップトップの写真

生成された結果は次のとおりです。

コーナーが検出されませんでした

ご覧のとおり、結果は良くありません。ノイズを拾っただけのように見えますが、主要なコーナーは検出されませんでした.

画像の角を印刷するために使用したコードは次のとおりです。しきい値を使用し、しきい値に任意の値を設定しました。

int _tmain(int argc, _TCHAR* argv[])
{

Mat img, dst, threshed;
img = imread("c:\\laptop.jpg",0);

dst = Mat::zeros(img.size(), CV_32FC1);

cornerHarris(img, dst, 2, 3, 0.04, BORDER_DEFAULT);



threshold(dst, threshed, 0.00001, 255, THRESH_BINARY_INV);

namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", threshed);
//imwrite("harris.jpg", threshed);
waitKey(0);

return 0;

If I reduce threshold the result is white with just a few black dots (detections) Increasing threshold just produces a more noisy like image.

何か不足していますか?この機能の品質を向上させるにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

9

goodFeaturesToTrack関数を試すことができます。Harris コーナー検出器の上に構築されていますが、ノイズをフィルタリングし、強いコーナーのみを返します。

于 2012-11-04T10:07:18.193 に答える