一辺が欠けた輪郭は面積が 0 に潰れる — 凸包で閉じ直すと面積・内部マスク・上限判定が同時に直る
画像処理
OpenCV
アルゴリズム
知識
判断
輪郭抽出で得た経路の面積(多角形の符号付き面積)を候補の大きさ判定に使うと、対象の境界が一辺だけ途切れた「コの字」のときに実態と大きくずれる。閉じていない帯は外周を行って内周を戻る往復経路として辿られるため、行きと戻りで面積が打ち消し合ってほぼ 0 になる。実測例では、外接矩形がフレームの 22% を占める対象なのに経路面積は 0.03% しかなく、下限面積で黙って捨てられていた。
影響は面積ゲートだけではない
同じ退化は下流の判定をまとめて壊す。
- 下限面積:真の対象を落とす
- 上限面積:面積が 0 なので実質判定不能になり、巨大な偽候補を通す
- 輪郭内部を塗って評価する判定(内部テクスチャの濃さなど):マスクが面でなく細い帯に退化する。帯は境界由来なので必ず強い信号を持ち、「均一な面を除外する」ガードが素通しになる
- 凸性(経路面積 ÷ 凸包面積)を含む形状スコア:項が 0 に張り付き、スコアの弁別力が実質アスペクトだけになる
対処
経路面積が下限未満の輪郭は凸包で閉じ直し、以降は凸包を輪郭として扱う。上記の崩れが一括で直る(面積が取れ、マスクが面になり、上限も機能する)。外接矩形は凸包を取っても変わらないので、閉じ直し前に求めておいても等価。
適用範囲を限定する
この置換は「対象の境界だけが細いリングとして残る前処理経路」に限って適用する。境界を太らせて塊として出す経路では経路面積がもともと意味を持つため不要で、実測では全経路に広げると既存の検出位置が壊れた(本来拾わない半端なリングが候補化される)。
検証方法
候補ごとに「経路面積」「凸包面積」「外接矩形面積」の3つを並べてログする。経路面積だけが桁違いに小さければ閉じていない輪郭で、閾値不足ではなく形状の問題だと判定できる。二値画像を書き出してどの辺が欠けているかを目視すると確実。