テクスチャ背景で輪郭が閉じないときはエッジ保存平滑化を足す — 縮小による代替は弱い段差ごと消す
画像処理
設計判断
アルゴリズム
知識
判断
対象と背景の輝度差が小さく(実測で 8bit グレー換算 35 前後)、かつ背景が細かい高周波テクスチャ(木目・布・紙の繊維など)を持つ場合、エッジ検出+モルフォロジーのクローズでは対象の境界エッジが背景テクスチャのエッジと連結して一つの塊になり、対象の輪郭が閉じない。対象内部に強い線があるとそこまでは閉じるため、「対象の一部だけが断片として取れ、全体は取れない」という形で現れる。閾値調整では救えない(境界のエッジは存在するが、周囲のエッジと区別できない)。
判断基準
- 打ち手は「エッジを強調する」ではなく「テクスチャを消す」方向の前処理パスを足すこと。中央値フィルタのようなエッジ保存平滑化は、カーネル幅より細い周期のテクスチャをほぼ消しつつ段差(ステップエッジ)の位置と振幅を保つため、消えていた境界が単独のエッジとして復活する。局所コントラスト強調系の前処理は逆にテクスチャも増幅するので、この症状には効かない。
- コスト削減のために「縮小してから処理する」で代替してはいけない。面積平均系の縮小は平滑化と縮小を同時に行うため、弱い段差が縮小時の補間でなまり、エッジ検出の閾値を下回って対象が取れなくなる。実測では、原寸+中央値フィルタで取れていた対象が、半分解像度+等価カーネルでは断片しか取れなくなった。この前処理が救おうとしているのが「弱い段差」である以上、段差を鈍らせる縮小とは目的が衝突する。
- カーネル幅はテクスチャの周期より十分大きく、対象の最小構造(内部の帯や線)より小さく取る。実測では検出解像度の長辺 1000px 前後に対して 11px 程度が、テクスチャを消しつつ対象内部の帯を保つ範囲だった。
落とし穴
- このフィルタは処理時間を大きく食う(画素数に比例し、検出全体の処理時間が 1.6〜1.7 倍になる規模)。常時実行するなら実測して許容範囲か確認する。条件付き実行にする設計は別途検討する。
検証方法
中間画像(エッジ画像・クローズ後の二値画像)を書き出して、対象の境界が「そもそも存在しないのか」「存在するが周囲のエッジと連結しているのか」を先に切り分ける。前者なら強調系、後者なら平滑化系が正しい打ち手になる。前処理の候補(フィルタ種別・カーネル幅・縮小率)は総当たりで走らせ、各条件で得られる候補矩形の一覧を並べて比較する。単一の代表画像で決めず、既存の正常シーン群で位置と件数の回帰が出ないことも同時に確認する。