Plane Detector

1 개요

Normal 정보가 있는 포인트 클라우드 또는 mesh 에서 평면을 검출하는 알고리즘

2 알고리즘 상세 설명

Source Object Destination Object
Source Object Destination Object
Fig. Source, Destination object.

Normal 정보가 있는 point cloud 또는 mesh 에 대하여 지원하며, Plane Fitting Target 을 Vertex Normal 또는 Face 로 지정할 수 있습니다.

normal vector resolution 에 기반하여 클러스터링 된 각 그룹 내에서 Plane 은 다음의 단계들을 거칩니다.

Outliers Filtering 단계에서는 지정된 Outliers Filtering Method 를 사용하여 평면을 정하고 해당 평면에 대한 outlier 를 규정 및 일시적 비활성화 합니다. 비활성화의 해제는 Plane Fitting 에서 평면 추정 이후 발생합니다. 이 단계는 Outliers Threshold Count = 0 으로 설정함으로써 생략될 수 있습니다.

Plane Fitting 단계에서는 non-outlier 를 대상으로 Plane Fitting Method 를 수행합니다. 일단 평면이 정해진 이후에는, 평가 시 outlier 를 해제한 상태에서 수행됩니다. 평가에 통과하지 못한 평면은 무효화 됩니다.

Plane Expansion 단계에서는 통과한 평면에 모든 inlier 점들을 삽입하며, 그룹과 무관하게 이루어집니다.

Plane Merging 단계는 최종적으로 1회만 수행되며, 유사하고 centroid 수직 거리가 가까운 평면들에 대하여 병합됩니다. 이 과정으로 인하여 일부 평면은 inlier distance 를 초과하는 원소를 가질 수 있습니다.

3 파라미터 설정 및 사용 방법

기본 파라미터 설정

Outliers Filtering 파라미터 설정

Plane Fitting 파라미터 설정

Result

4 예제 코드

CPlaneDetector3D planeDetector3D;

planeDetector3D.SetSourceObject(floSrcObject)
planeDetector3D.SetDestinationObject(floDstObject)

planeDetector3D.SetPlaneFittingTarget(CPlaneDetector3D::EPlaneFittingTarget_VertexNormal)
planeDetector3D.SetMaximumParallelPlaneCount(1)
planeDetector3D.SetNormalVectorResolution(Base::TPoint3<int32_t>(19, 19, 19))
planeDetector3D.SetInlierDistance(0.5)
planeDetector3D.SetMinimumInlierCount(500)
planeDetector3D.SetFitCosineSimilarity(0.995)
planeDetector3D.SetExpandCosineSimilarity(0.99)
planeDetector3D.SetMergeCosineSimilarity(0.99)
planeDetector3D.SetOutliersFilteringMethod(CPlaneDetector3D::EOutliersFilteringMethod_LeastSquare)
planeDetector3D.SetOutliersThresholdCount(1)
planeDetector3D.SetOutliersThreshold(3.00)
planeDetector3D.SetPlaneFittingMethod(CPlaneDetector3D::EPlaneFittingMethod_LeastSquare)

planeDetector3D.Execute()
CPlaneDetector3D planeDetector3D = new CPlaneDetector3D();

planeDetector3D.SetSourceObject(ref floSrcObject)
planeDetector3D.SetDestinationObject(ref floDstObject)

planeDetector3D.SetPlaneFittingTarget(CPlaneDetector3D.EPlaneFittingTarget.VertexNormal)
planeDetector3D.SetMaximumParallelPlaneCount(1)
planeDetector3D.SetNormalVectorResolution(new TPoint3<int>(19, 19, 19))
planeDetector3D.SetInlierDistance(0.5)
planeDetector3D.SetMinimumInlierCount(500)
planeDetector3D.SetFitCosineSimilarity(0.995)
planeDetector3D.SetExpandCosineSimilarity(0.99)
planeDetector3D.SetMergeCosineSimilarity(0.99)
planeDetector3D.SetOutliersFilteringMethod(CPlaneDetector3D.EOutliersFilteringMethod.LeastSquare)
planeDetector3D.SetOutliersThresholdCount(1)
planeDetector3D.SetOutliersThreshold(3.00)
planeDetector3D.SetPlaneFittingMethod(CPlaneDetector3D.EPlaneFittingMethod.LeastSquare)

planeDetector3D.Execute()
planeDetector3D = CPlaneDetector3D()

planeDetector3D.SetSourceObject(floSrcObject)
planeDetector3D.SetDestinationObject(floDstObject)

planeDetector3D.SetPlaneFittingTarget(CPlaneDetector3D.EPlaneFittingTarget.VertexNormal)
planeDetector3D.SetMaximumParallelPlaneCount(1)
planeDetector3D.SetNormalVectorResolution(TPoint3[int](19, 19, 19))
planeDetector3D.SetInlierDistance(0.5)
planeDetector3D.SetMinimumInlierCount(500)
planeDetector3D.SetFitCosineSimilarity(0.995)
planeDetector3D.SetExpandCosineSimilarity(0.99)
planeDetector3D.SetMergeCosineSimilarity(0.99)
planeDetector3D.SetOutliersFilteringMethod(CPlaneDetector3D.EOutliersFilteringMethod.LeastSquare)
planeDetector3D.SetOutliersThresholdCount(1)
planeDetector3D.SetOutliersThreshold(3.00)
planeDetector3D.SetPlaneFittingMethod(CPlaneDetector3D.EPlaneFittingMethod.LeastSquare)

planeDetector3D.Execute()

5 기타 사항

Supported Feature

Supported Format

6 관련 알고리즘