マスクエッジスナップ
エッジを検出境界に合わせて、インスタンスセグメンテーションマスクを精緻化します。
予測境界の周囲の帯域内で、輪郭点をSobelエッジにスナップすることで、インスタンスセグメンテーションマスクを精緻化します。このブロックは、マスクのエッジを検出された画像特徴に合わせて調整することで、セグメンテーション精度を向上させます。
このブロックの仕組み
このブロックは、洗練された多段パイプラインを通じてセグメンテーションマスクを精緻化します:
エッジ検出: 入力画像からSobel勾配の大きさを計算してエッジを検出します
適応的しきい値処理: 重要なエッジを特定するために、ピクセルごとの適応的しきい値処理(ローカル平均 + sigma * ローカル標準偏差)を使用します
形態学的処理: エッジ区間の小さなギャップを橋渡しするためにクロージング(膨張 + 収縮)を適用します
細線化: Zhang-Suenの単一反復細線化を適用して、連結性を保ちながらエッジ幅を1〜2ピクセルに減らします
境界帯の生成: 各予測マスクの輪郭の周囲に探索帯を構築します
面積フィルタリング: 最小面積しきい値を下回る小さなエッジ成分を除去します
輪郭スナップ: 元のマスク輪郭の各点について、許容範囲内で最も強い近傍エッジを見つけ、それにスナップします
一般的な使用例
医用画像解析: 臓器/腫瘍のセグメンテーションマスクを、解剖学的境界に合わせて精緻化します
産業品質管理: 精密な寸法測定のために部品の境界検出を改善します
自律走行車: 経路計画の改善のために道路/車線のセグメンテーション境界を精緻化します
農業モニタリング: 収量推定のために作物境界の検出を強化します
顕微鏡解析: 形態学的解析のために細胞/核のセグメンテーションを精緻化します
文書処理: OCRのためにテキスト領域の境界検出を改善します
入力パラメータ
image : 入力画像(カラーまたはグレースケール)
単一チャネル、3チャネル(BGR)、または4チャネル(BGRA)にできます
必要に応じて、前処理(ぼかし、コントラスト強調)を上流で適用してください
セグメンテーション : 初期のインスタンスセグメンテーション予測
ソース: 物体検出またはインスタンスセグメンテーションモデルから
を含んでいる必要があります
maskフィールド;空の場合は変更せずにそのまま通過します
pixel_tolerance : エッジスナップのための最大垂直距離(ピクセル)
範囲: 通常5〜50
5〜15: オフセットが最小の高精度予測
20〜50: より許容度が必要な粗い予測
sigma : 適応Sobelしきい値の厳しさを調整する乗数
範囲: 通常0.1〜2.0
0.1〜0.5: 寛容、弱いエッジを残し、低コントラスト境界に適しています
1.0〜2.0: 厳格、最も強いエッジのみが残り、高コントラスト画像に適しています
min_contour_area : エッジ成分の最小封入ポリゴン面積
範囲: 通常10〜1000
小さい(10〜50): 分断されたエッジを保持します
大きい(200〜1000): ノイズを強力に除去します
dilation_iterations : 形態学的クロージングの反復回数
範囲: 通常0〜10
0: クロージングなし、しきい値処理されたエッジのみ
1〜2: 細い隙間を橋渡しします
3〜5: 目に見える短い切れ目を橋渡しします
10以上: 強力で、無関係なエッジを結合する可能性があります
boundary_band_width : マスク輪郭の周囲にある探索帯の半幅(デフォルト: 15)
予測境界と真の境界の間で補正可能な最大距離を設定します
adaptive_window_size : ローカル統計ウィンドウの一辺の長さ(デフォルト: 41)
画像の短辺の約5〜10%にするのが目安です
小さい(15〜25): 局所コントラストへの高い感度、ノイズも拾いやすい
大きい(81〜121): 滑らかなしきい値分布で、グローバルしきい値処理に近くなります
出力
refined_segmentation : スナップされたマスク輪郭を持つ同じ検出結果 エッジ : 生き残ったすべてのエッジピクセルの和集合を含む単一の検出結果(デバッグ/可視化用)
前処理
前処理は通常、成功のために重要です。 このブロックは前処理を行いません。Sobelが見るのは入力したものそのものです。難しい画像では、上流でRoboflowの画像処理ブロックを連結してください:
ガウシアンぼかし 粒状またはノイズの多い表面(溶接部、機械加工された金属、生体組織)では、エッジ検出の前にぼかしを入れてピクセル単位のノイズを抑えます。5x5カーネルにsigma 1.0は妥当なデフォルトです。非常にノイズが多い画像では7x7または9x9に増やしてください。ぼかしすぎないでください。強いぼかしは角を丸め、実際の境界を鈍らせ、境界位置を内側に偏らせます。
バイラテラルぼかし 画像にノイズと重要なシャープなエッジの両方がある場合(例: クリーンな背景上のテクスチャ布)、ガウシアンより優れています。遅いですが、平坦領域をノイズ除去しながらエッジを保持します。
コントラスト強調 境界コントラストが本当に低く、しきい値処理で確実に判定できない場合に使用します。コントラスト強調ブロックはヒストグラムを正規化して全レンジを使えるようにし、強い手法のようなノイズ増幅なしでエッジ検出感度を改善します。残ったノイズを抑えるために、その後にぼかしを適用してください。すでに高コントラストな画像には使わないでください。
形態学的オープニングの後にクロージング オープニング(収縮→膨張)は、エッジ検出の前に入力から小さな明るい斑点や細い突起を除去します。表面に細かなゴミやホットピクセルがあり、さもないと偽のエッジが生成される場合に有用です。クロージング(膨張→収縮)は、明るい領域の小さな暗い穴や隙間を埋めます。前処理としてはあまり必要ありません。なぜなら、エッジマップ自体でのギャップ埋めが、 dilation_iterations パラメータですでに行われるからです。この前処理には、Morphological Transformation v2 ブロックの「Opening then Closing」操作を使用してください。
順序が重要です: まずぼかしを適用し、必要ならその後でコントラスト調整を行います。順序を逆にすると、ぼかしが抑える前にコントラスト調整がノイズを増幅してしまいます。
型識別子
ステップで次の識別子を使用してください "type" フィールド: roboflow_core/mask_edge_snap@v1 ワークフローにこのブロックをステップとして追加するには。
プロパティ
名前
型
説明
参照
name
str
このステップの一意の識別子を入力してください。
❌
pixel_tolerance
整数
スナップ時に各輪郭点から候補エッジまでの最大垂直距離(ピクセル)。典型例: 高精度予測では5〜15、粗い予測では20〜50。小さすぎると: 範囲外の実エッジを見逃します。大きすぎると: スナップが無関係なエッジへ逸れる可能性があります。
✅
sigma
float
適応Sobelしきい値(local_mean + sigma * local_std)の厳しさを調整する乗数。低い値(0.1〜0.5): 寛容で低コントラストに適しています。高い値(1.0〜2.0): 厳格で最も強いエッジのみを残します。他のパラメータの後で調整してください。
✅
min_contour_area
float
保持するエッジ成分の最小封入ポリゴン面積。小さい(10〜50): 分断されたエッジを保持します。大きい(200〜1000): ノイズを強力に除去します。おおむね dilation_iterations に比例してスケールします。
✅
dilation_iterations
整数
しきい値処理されたエッジマップのギャップを橋渡しする形態学的クロージングの反復回数。各反復で約2pxの隙間を橋渡しします。0: クロージングなし。1〜2: 細い隙間。3〜5: 目に見える短い切れ目。10以上: 強力な結合。
✅
boundary_band_width
整数
セグメンテーション輪郭の周囲にある探索帯の半幅(ピクセル)。補正可能な予測境界と真の境界の最大距離を設定します。通常は pixel_tolerance 以上であるべきです。
✅
adaptive_window_size
整数
適応しきい値のためのローカル統計ウィンドウの一辺の長さ。小さい(15〜25): 局所感度が高く、ノイズを拾うことがあります。デフォルト41: バランスが取れています。大きい(81〜121): 滑らかな分布で、グローバルしきい値処理に近くなります。画像の短辺の約5〜10%にするべきです。
✅
この 参照 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します ワークフロー 実行時。参照 バインディング 詳細は。
入力と出力のバインディング
利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が マスクエッジスナップ のバージョン v1 あるか確認してください。
入力と出力のバインディング
入力
image(image): 入力画像(カラーまたはグレースケール)をエッジ検出とスナップに使用します。グレースケール、単一チャネル、BGR、BGRAのいずれでも構いません。内部で前処理は適用されません。必要なら、ぼかしやコントラスト強調のために上流ブロックを使用してください。セグメンテーション(instance_segmentation_prediction): mask フィールドが入力されたインスタンスセグメンテーション予測。各マスク輪郭は検出されたエッジにスナップされます。空の場合、セグメンテーションは変更されずにそのまま通過します。'$steps.segmentation_model.predictions' のような参照文字列や supervision.Detections オブジェクトにできます。pixel_tolerance(整数): スナップ時に各輪郭点から候補エッジまでの最大垂直距離(ピクセル)。典型例: 高精度予測では5〜15、粗い予測では20〜50。小さすぎると: 範囲外の実エッジを見逃します。大きすぎると: スナップが無関係なエッジへ逸れる可能性があります。sigma(float): 適応Sobelしきい値(local_mean + sigma * local_std)の厳しさを調整する乗数。低い値(0.1〜0.5): 寛容で低コントラストに適しています。高い値(1.0〜2.0): 厳格で最も強いエッジのみを残します。他のパラメータの後で調整してください。min_contour_area(float): 保持するエッジ成分の最小封入ポリゴン面積。小さい(10〜50): 分断されたエッジを保持します。大きい(200〜1000): ノイズを強力に除去します。おおむね dilation_iterations に比例してスケールします。dilation_iterations(整数): しきい値処理されたエッジマップのギャップを橋渡しする形態学的クロージングの反復回数。各反復で約2pxの隙間を橋渡しします。0: クロージングなし。1〜2: 細い隙間。3〜5: 目に見える短い切れ目。10以上: 強力な結合。boundary_band_width(整数): セグメンテーション輪郭の周囲にある探索帯の半幅(ピクセル)。補正可能な予測境界と真の境界の最大距離を設定します。通常は pixel_tolerance 以上であるべきです。adaptive_window_size(整数): 適応しきい値のためのローカル統計ウィンドウの一辺の長さ。小さい(15〜25): 局所感度が高く、ノイズを拾うことがあります。デフォルト41: バランスが取れています。大きい(81〜121): 滑らかな分布で、グローバルしきい値処理に近くなります。画像の短辺の約5〜10%にするべきです。
出力
refined_segmentation(instance_segmentation_prediction): 検出されたバウンディングボックスとセグメンテーションマスクを sv.Detections(...) オブジェクトの形式で持つ予測。エッジ(instance_segmentation_prediction): 検出されたバウンディングボックスとセグメンテーションマスクを sv.Detections(...) オブジェクトの形式で持つ予測。
最終更新
役に立ちましたか?