画像に示されているポイントを抽出するアルゴリズムを作成しました。それらは凸形状を形成し、それらの順序を知っています。そのようなポイントからコーナー (上部 3 と下部 3) を抽出するにはどうすればよいですか? 私はopencvを使用しています。
2 に答える
オブジェクトの凸包が既にあり、その包に角の点が含まれている場合は、6 つの点だけになるまで包を単純化するだけです。
ポリゴンを単純化するには多くの方法があります。たとえば、この回答で使用されているこの単純なアルゴリズムを使用できます:画像内の長方形のコーナー座標を見つける方法
do
for each point P on the convex hull:
measure its distance to the line AB _
between the point A before P and the point B after P,
remove the point with the smallest distance
repeat until 6 points left
ポイントの正確な数がわからない場合は、最小距離が特定のしきい値を超えるまでポイントを削除できます
Ramer-Douglas-Peuckerを実行してポリゴンを単純化することもできます。openCV には既にcv::approxPolyDPで実装されています。
4 ではなく 6 ポイントを使用するように openCV の正方形のサンプルを変更するだけです。
どの特徴点がコーナーに対応するかを直接判断しようとする代わりに、画像全体にコーナー検出アルゴリズムを適用してから、どの特徴点がコーナー検出器のピークに近いかを調べてみませんか?
Harrisコーナー検出器から始めることをお勧めします。OpenCV の実装はcv::cornerHarrisです。
基本的に、Harris アルゴリズムは、水平方向と垂直方向の両方のソーベル フィルターを画像に適用します (または、画像の x 方向と y 方向の偏導関数の他の近似値)。
次に、各画像ピクセルで 2 行 2列の構造行列を作成し、その行列の固有値を調べて、両方の固有値があるしきい値を超えている場合はポイント コーナーを呼び出します。