Main Content

pcfitplane

3차원 포인트 클라우드에 평면 피팅

설명

model = pcfitplane(ptCloudIn,maxDistance)는 정상값 점부터 평면까지 허용되는 최대 거리를 지정하여 포인트 클라우드에 평면을 피팅합니다. 이 함수는 평면을 설명하는 기하학적 모델을 반환합니다.

이 함수는 MSAC(M-estimator SAmple Consensus) 알고리즘을 사용하여 평면을 찾습니다. MSAC 알고리즘은 RANSAC(RANdom SAmple Consensus) 알고리즘의 변형입니다.

model = pcfitplane(ptCloudIn,maxDistance,referenceVector)는 1×3 referenceVector 입력값으로 방향 제약 조건을 지정하여 포인트 클라우드에 평면을 피팅합니다.

예제

model = pcfitplane(ptCloudIn,maxDistance,referenceVector,maxAngularDistance)는 최대 각거리를 지정하여 포인트 클라우드에 평면을 피팅합니다.

[model,inlierIndices,outlierIndices] = pcfitplane(___)은 포인트 클라우드 입력값에 있는 정상값과 이상값 점에 대한 선형 인덱스를 추가로 반환합니다.

[___,meanError] = pcfitplane(___)은 위에 열거된 구문 중 하나를 사용하여 정상값 점부터 모델까지의 거리의 평균 오차를 추가로 반환합니다.

예제

[___] = pcfitplane(___,Name=Value)는 위에 열거된 구문의 인수 조합 외에 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 예를 들어 pcfitplane(ptCloud,maxDistance,referenceVector,maxAngularDistance,Confidence=95)는 최대 정상값 수를 찾기 위한 신뢰율을 95로 설정합니다.

예제

모두 축소

포인트 클라우드를 불러옵니다.

load("object3d.mat")

포인트 클라우드를 표시하고 Figure에 레이블을 지정합니다.

figure
pcshow(ptCloud)
xlabel("X(m)")
ylabel("Y(m)")
zlabel("Z(m)")
title("Original Point Cloud")

평면 피팅에 사용할 최대 점-평면 거리(2cm)를 설정합니다.

maxDistance = 0.02;

평면의 법선 벡터를 설정합니다.

referenceVector = [0,0,1];

최대 각거리를 5도로 설정합니다.

maxAngularDistance = 5;

첫 번째 평면인 테이블을 검출하고 포인트 클라우드에서 추출합니다.

[model1,inlierIndices,outlierIndices] = pcfitplane(ptCloud,...
            maxDistance,referenceVector,maxAngularDistance);
plane1 = select(ptCloud,inlierIndices);
remainPtCloud = select(ptCloud,outlierIndices);

관심 영역을 설정하여 두 번째 평면인 왼쪽 벽에 대한 탐색을 제한합니다.

roi = [-inf,inf;0.4,inf;-inf,inf];
sampleIndices = findPointsInROI(remainPtCloud,roi);

왼쪽 벽을 검출하고 남아 있는 포인트 클라우드에서 추출합니다.

[model2,inlierIndices,outlierIndices] = pcfitplane(remainPtCloud,...
            maxDistance,SampleIndices=sampleIndices);
plane2 = select(remainPtCloud,inlierIndices);
remainPtCloud = select(remainPtCloud,outlierIndices);

두 평면과 남아 있는 점을 플로팅합니다.

figure
pcshow(plane1)
title("First Plane")

figure
pcshow(plane2)
title("Second Plane")

figure
pcshow(remainPtCloud)
title("Remaining Point Cloud")

입력 인수

모두 축소

포인트 클라우드로, pointCloud 객체로 지정됩니다.

정상값 점부터 평면까지의 최대 거리로, 스칼라 값으로 지정됩니다. 포인트 클라우드에 사용하는 단위와 일치하는 단위로 거리를 지정합니다.

데이터형: single | double

기준 방향 제약 조건으로, 1×3 벡터로 지정됩니다. 방향 제약 조건을 적용하여 평면을 입력 포인트 클라우드에 피팅하려면 함수에 대해 이 인수를 지정해야 합니다. 기준 벡터를 지정하지 않은 경우 함수는 평면 방정식 ax + by + cz + d = 0을 사용하여 모델을 피팅합니다.

데이터형: single | double

피팅되는 평면의 법선 벡터와 기준 방향 사이의 최대 절대 각거리로, 스칼라 값(단위: 도)으로 지정됩니다.

데이터형: single | double

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: pcfitplane(ptCloud,maxDistance,referenceVector,maxAngularDistance,Confidence=95)는 최대 정상값 수를 찾기 위한 신뢰율을 95로 설정합니다.

입력 포인트 클라우드에서 샘플링할 점의 선형 인덱스로, 열 벡터로 지정됩니다. 벡터가 비어 있으면 평면 피팅을 위한 RANSAC 반복에서 모든 점이 샘플링 후보임을 의미합니다. 서브셋을 지정하면 모델 피팅 시 서브셋에 포함된 점만 샘플링됩니다.

점의 서브셋을 제공하면 처리 속도를 크게 높이고 시행 횟수를 줄일 수 있습니다. pointCloud 객체의 findPointsInROI 객체 함수를 사용하여 인덱스 벡터를 생성할 수 있습니다.

정상값을 찾기 위한 최대 무작위 시행 횟수로, 양의 정수로 지정됩니다. 이 값을 늘리면 출력값이 더 견고해지지만 추가적인 계산이 필요합니다.

최대 정상값 수를 찾기 위한 신뢰율로, (0 100) 범위의 숫자형 스칼라로 지정됩니다. 이 값을 늘리면 출력값이 더 견고해지지만 추가적인 계산이 필요합니다.

출력 인수

모두 축소

평면의 기하학적 모델로, planeModel 객체로 반환됩니다.

입력 포인트 클라우드에 유효한 점이 충분하지 않거나 함수에서 충분한 정상값 점을 찾을 수 없는 경우 출력 모델 계수는 0으로 설정됩니다.

입력 포인트 클라우드 내 정상값 점의 선형 인덱스로, 열 벡터로 반환됩니다.

입력 포인트 클라우드 내 이상값 점의 선형 인덱스로, 열 벡터로 반환됩니다.

정상값 점부터 모델까지의 거리의 평균 오차로, 스칼라 값으로 반환됩니다.

참고 문헌

[1] Torr, P. H. S., and A. Zisserman. “MLESAC: A New Robust Estimator with Application to Estimating Image Geometry.” Computer Vision and Image Understanding. 2000.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2015b에 개발됨