Appendix B — 重複マスク削除の仕組み

SAM2 の自動セグメンテーションでは、同じ粒子に対して複数のマスクが出力されることがあります。 これは、異なるプロンプト点やクロップ領域から同じ対象が検出される場合に起こります。 そのまま別々の粒として数えると、最終的な粒子数が実際より多くなります。

deduplicate masks が有効な場合、このアプリは SAM2 が出力したマスク同士を比較し、編集可能なラベルレイヤーを作成する前に重複している可能性が高いマスクを削除します。

重なりの評価指標

2つのマスク A と B について、まず共通部分のピクセル数、それぞれの面積、和集合の面積を計算します。 そのうえで、次の2つの指標を使います。

Containment は、小さい方のマスクがもう一方のマスクにどの程度含まれているかを表します。

contain = intersection(A, B) / min(area(A), area(B))

これは、片方のマスクがもう片方のマスクの内側にほぼ入っている場合に有効です。 たとえば、SAM2 が粒子全体のマスクと、その中心部だけを覆う小さめのマスクを同時に出力した場合、IoU がそれほど高くなくても containment は高くなります。

IoU (Intersection over Union) は、2つのマスクが領域全体としてどの程度似ているかを表します。

iou = intersection(A, B) / union(A, B)

これは、2つのマスクの大きさや形が近い場合の重複判定に有効です。

重複とみなす条件

2つのマスクは、次のどちらかを満たす場合に重複候補とみなされます。

contain >= contain thresh
iou >= iou thresh

デフォルト値は次のとおりです。

  • contain thresh: 0.90
  • iou thresh: 0.70

2つの指標を併用することで、次のような代表的な重複パターンを扱いやすくしています。

  • 片方のマスクがもう片方のマスクにほぼ含まれている
  • 2つのマスクがほぼ同じ領域を覆っている

どちらのマスクを残すか

重複と判定された場合、score key で指定されたスコアを比較します。 デフォルトでは predicted_iou を使います。 これは SAM2 が予測したマスク品質スコアです。 スコアが高い方のマスクを残し、低い方のマスクを削除します。

スコアが同じ場合は、並び順が先のマスクを残します。 マスクは重複削除の前に重心位置で並べ替えているため、ラベル ID はおおむね左上から右下へ並びやすくなります。

パラメータ調整の目安

必要なマスクまで削除されてしまう場合は、contain thresh または iou thresh を上げてください。 重複削除がより控えめになります。

明らかな重複マスクが残る場合は、contain thresh または iou thresh を下げてください。 重複削除がより強く働きます。

粒子カウントでは、まずデフォルト値で実行し、オーバーレイを確認してから、重複検出や削除されすぎが見える場合だけ調整するのがおすすめです。