マスク面積測定
検出されたオブジェクトの面積を測定し、必要に応じて実世界の単位に変換します。
検出されたオブジェクトの面積を測定します。インスタンスセグメンテーションのマスクの場合、面積はゼロ以外のマスクピクセルを数えることで計算されます(穴も正しく処理されます)。バウンディングボックスのみの検出の場合、面積は幅×高さです。必要に応じて、ピクセル面積を実世界の単位に変換するために pixels_per_unit のキャリブレーション値を使用します。
このブロックの仕組み
このブロックは、検出された各オブジェクトの面積を計算し、各検出ごとに2つの値を保存します:
area_px- 平方ピクセルでの面積(常に計算されます)area_converted- 実世界の単位での面積:area_px / (pixels_per_unit ** 2)(area_pxのときはpixels_per_unitと等しい)
両方の値は各検出に付加され、シリアライズされたJSON出力に含まれます。このブロックは、これらのフィールドを追加した入力検出を返すため、下流のブロック(例: ラベル表示)で面積値を表示できます。
面積の計算
このブロックは、受け取る予測の種類に応じて2つのモードで動作します:
マスクのピクセル面積(インスタンスセグメンテーション):入力の検出にセグメンテーションマスクが含まれている場合、このブロックは
cv2.countNonZeroを使って各マスク内のゼロ以外のピクセル数を数えます。これにより、穴のあるマスクも正しく処理されます。穴のピクセルはゼロであり、カウントから除外されます。バウンディングボックスの面積(物体検出):セグメンテーションマスクが利用できない場合、このブロックは面積をバウンディングボックスの幅×高さ(
w * h).
単位変換
を設定して、 pixels_per_unit 入力を使い、ピクセル面積を実世界の単位(例: cm²、in²、mm²)に変換します。面積は2次元なので、変換では比率を2乗します:
area_converted = area_px / (pixels_per_unit ** 2)たとえば、キャリブレーションが130ピクセル/cmの場合、 area_px = 16900 となる検出は area_converted = 16900 / 16900 = 1.0 cm².
pixels_per_unit の求め方: 既知のサイズの物体(例: 定規やキャリブレーションターゲット)をカメラの視野内に置きます。画像内でその長さをピクセル単位で測定し、実世界の長さで割ります。たとえば、10 cmの参照物が1300ピクセルに相当する場合、 pixels_per_cm = 1300 / 10 = 130となります。遠近補正を使用している場合、キャリブレーションオブジェクトは、遠近補正を算出したのと同じ平面上に配置する必要があります。
一般的な使用例
サイズベースのフィルタリング:フィルタリングブロックと連結して、最小面積しきい値を超える検出だけを残すことで、小さなノイズ検出を除外します。
品質管理:測定した面積を期待範囲と比較して、製造部品がサイズ仕様を満たしているか確認します。
農業分析:航空画像や接写画像から葉面積、作物の被覆率、樹冠の広がりを測定します。
医療画像解析:創傷、病変、または解剖学的構造の面積を定量化します。
pixels_per_unitを使用して、臨床記録用の実世界の測定値を取得します。
他のブロックへの接続
上流 -- 検出およびセグメンテーションモデル:物体検出またはインスタンスセグメンテーションモデルの出力を
predictions入力に接続します。インスタンスセグメンテーションモデル(マスクを生成するもの)は、バウンディングボックスのみの検出よりも正確な面積測定を提供します。上流 -- カメラキャリブレーションブロック:Use
roboflow_core/camera_calibration@v1検出の前にレンズ歪みを補正するために上流に接続します。上流 -- 遠近補正ブロック:Use
roboflow_core/perspective_correction@v1斜めからの画像を俯瞰ビューに変換し、面積測定がオブジェクトの真の占有面積を反映するようにするために上流に接続します。下流 -- 表示:出力を
predictionsラベル表示またはポリゴン表示のブロックに渡します。area_pxおよびarea_convertedフィールドはラベルとして表示できます。下流 -- フィルタリングブロック:面積がしきい値を満たす検出だけを残すために、拡張された検出をフィルタリングブロックで使用します。
要件
このブロックは、物体検出またはインスタンスセグメンテーションモデルからの検出予測を必要とします。OpenCV と NumPy(inference に含まれています)以外に、追加の環境変数、APIキー、外部依存関係は不要です。最も正確な面積測定を行うには、オブジェクトごとのマスクを生成するインスタンスセグメンテーションモデルを使用してください。
種別識別子
ステップで次の識別子を使用します "type" フィールド: roboflow_core/mask_area_measurement@v1 ワークフローにステップとしてブロックを追加するには。
プロパティ
名前
型
説明
参照
name
str
このステップの一意の識別子を入力してください。
❌
pixels_per_unit
float
実世界の長さの単位あたりのピクセル数(例: cmあたりのピクセル数)。変換後の面積は area_px / (pixels_per_unit ** 2) として計算されます。デフォルトの 1.0 は変換なしを意味します(area_converted は area_px に等しい)。
✅
この 参照 列は、で利用可能な動的値を使用してプロパティをパラメータ化できる可能性を示します ワークフロー 実行時。参照 バインディング 詳細情報
入出力バインディング
利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が マスク面積測定 のバージョン v1 持つか確認してください。
入出力バインディング
入力
predictions(Union[instance_segmentation_prediction,object_detection_prediction]):面積を測定する検出予測..pixels_per_unit(float):実世界の長さの単位あたりのピクセル数(例: cmあたりのピクセル数)。変換後の面積は area_px / (pixels_per_unit ** 2) として計算されます。デフォルトの 1.0 は変換なしを意味します(area_converted は area_px に等しい)。
出力
predictions(Union[object_detection_prediction,instance_segmentation_prediction]): 検出されたバウンディングボックスを含む予測。sv.Detections(...) オブジェクトの形式で、もしobject_detection_prediction): 検出されたバウンディングボックスとセグメンテーションマスクを含む予測。sv.Detections(...) オブジェクトの形式で、もしinstance_segmentation_prediction.
最終更新
役に立ちましたか?