마스크 면적 측정
감지된 객체의 면적을 측정하고 필요에 따라 실제 단위로 변환합니다.
탐지된 객체의 면적을 측정합니다. 인스턴스 분할 마스크의 경우, 면적은 0이 아닌 마스크 픽셀을 세어 계산됩니다(구멍을 올바르게 처리함). 바운딩 박스만 있는 탐지의 경우, 면적은 너비에 높이를 곱한 값입니다. 필요에 따라 a를 사용하여 픽셀 면적을 실제 단위로 변환합니다 pixels_per_unit 보정 값.
이 블록의 작동 방식
이 블록은 각 탐지 객체의 면적을 계산하고, 탐지마다 두 개의 값을 저장합니다:
area_px- 제곱 픽셀 단위 면적(항상 계산됨)area_converted- 실제 단위의 면적:area_px / (pixels_per_unit ** 2)(와 같음area_pxwhenpixels_per_unit가 1.0일 때)
두 값은 각 탐지에 연결되어 직렬화된 JSON 출력에 포함됩니다. 이 블록은 이러한 필드가 추가된 입력 탐지를 반환하므로, 후속 블록(예: 레이블 시각화)에서 면적 값을 표시할 수 있습니다.
면적 계산
이 블록은 수신하는 예측 유형에 따라 두 가지 모드로 동작합니다:
마스크 픽셀 면적(인스턴스 분할): 입력 탐지에 분할 마스크가 포함되어 있으면, 이 블록은
cv2.countNonZero를 사용해 각 마스크의 0이 아닌 픽셀 수를 셉니다. 이는 구멍이 있는 마스크를 올바르게 처리합니다. 구멍 픽셀은 0이며 집계에서 제외됩니다.바운딩 박스 면적(객체 탐지): 분할 마스크가 없을 경우, 이 블록은 바운딩 박스의 너비에 높이를 곱해 면적을 계산하는 방식으로 대체합니다(
w * h).
단위 변환
을 설정하여 pixels_per_unit 픽셀 면적을 실제 단위(예: cm², in², mm²)로 변환합니다. 면적은 2차원이므로 변환 시 비율을 제곱합니다:
area_converted = area_px / (pixels_per_unit ** 2)예를 들어 보정 값이 130 pixels/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입력에 연결합니다. 인스턴스 분할 모델(마스크를 생성함)은 바운딩 박스만 있는 탐지보다 더 정확한 면적 측정을 제공합니다.상류 -- 카메라 보정 블록: 사용
roboflow_core/camera_calibration@v1탐지 전에 렌즈 왜곡을 보정하기 위해 상류에 연결합니다.상류 -- 원근 보정 블록: 사용
roboflow_core/perspective_correction@v1기울어진 이미지를 상향식 보기로 변환하여 면적 측정이 실제 객체의 점유 면적을 반영하도록 상류에 연결합니다.하류 -- 시각화: 출력
predictions을 레이블 또는 다각형 시각화 블록에 전달합니다.area_px및area_converted필드는 레이블로 표시할 수 있습니다.하류 -- 필터링 블록: 보강된 탐지를 필터링 블록과 함께 사용하여 면적이 임계값을 충족하는 탐지만 유지합니다.
요구 사항
이 블록은 객체 탐지 또는 인스턴스 분할 모델의 탐지 예측을 필요로 합니다. inference에 포함된 OpenCV와 NumPy 외에 추가적인 환경 변수, API 키 또는 외부 종속성은 필요하지 않습니다. 가장 정확한 면적 측정을 위해 객체별 마스크를 생성하는 인스턴스 분할 모델을 사용하세요.
유형 식별자
step에서 다음 식별자를 사용하세요 "type" 필드: roboflow_core/mask_area_measurement@v1 를 워크플로에 단계로 추가합니다.
속성
이름
유형
설명
참조
name
str
이 단계에 고유 식별자를 입력하세요..
❌
pixels_per_unit
실수
실제 길이 단위당 픽셀 수(예: 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(실수): 실제 길이 단위당 픽셀 수(예: 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.
마지막 업데이트
도움이 되었나요?