ハリスコーナー検出器を実装する予定の場合は、gradient
を使用しないでください。伝統的には、派生カーネルを使用し、このカーネルで画像をフィルタリングすることが行われています。あなたは様々なカーネルを使うことができますが、私が実際に行ったことは、水平カーネルdx
が[-1 0 1]
であり、垂直カーネルdy
がこれの転置か[-1;0;1]
であるように、センタリングされた差分を使用することです。したがって、これらのカーネルで画像をフィルタリングして、画像の水平および垂直グラデーションであるIx
およびIy
を取得し、これらの画像の平方バージョンで平滑化を実行します。Ix.^2
,Iy.^2
およびその製品Ix.*Iy
。次に、相関行列を作成し、行列式と痕跡を見つけ、コーナー応答を決定します。このしきい値を超える値は、潜在的なコーナーです。微分画像上でガウス平滑化を実行すると、当初の質問に記載されているガウス分布の微分で原画像が効果的にフィルタリングされます。
は、したがって、あなたは、単に行う、あなたのイメージがim
に保存されていると仮定すると:
im = double(im); % Cast to double precision to ensure accuracy
dx = [-1 0 1];
dy = dx.';
Ix = conv2(im, dx, 'same');
Iy = conv2(im, dy, 'same');
あなたは最終的にはハリスコーナーレスポンスを計算するためにIx
とIy
を使用します。イメージ処理ツールボックスをお持ちの場合は、代わりにimfilter
を使用することをお勧めします。それは速く、それはIntel Integrated Performance Primitives (IIPP)を使用します。正しく計算する方法の詳細については、私の以前の投稿をご覧ください:Trying to find/understand correct implementation of Harris Corners