주요 콘텐츠

ransac

잡음 있는 데이터에 모델 피팅

설명

[model,inlierIdx] = ransac(data,fitFcn,distFcn,sampleSize,maxDistance)는 RANSAC(RANdom SAmple Consensus) 알고리즘의 한 버전인 MSAC(M-estimator SAmple Consensus) 알고리즘을 사용하여 잡음 있는 데이터에 모델을 피팅합니다.

모델 피팅 함수 fitFcn과 모델에서 데이터까지의 거리를 계산하는 함수 distFcn을 지정합니다. ransac 함수는 sampleSize를 사용하여 data에서 임의 샘플을 가져오고 피팅 함수를 사용하여 maxDistance 내에 있는 정상값 개수를 최대화합니다.

예제

[___] = ransac(___,Name,Value)는 하나 이상의 Name,Value 쌍 인수를 추가로 지정합니다.

예제

모두 축소

잡음 있는 2차원 점 세트를 불러오고 플로팅합니다.

load pointsForLineFitting.mat
plot(points(:,1),points(:,2),'o');
hold on

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

선형 최소제곱을 사용하여 선을 피팅합니다. 이상값으로 인해 선이 제대로 피팅되지 않습니다.

modelLeastSquares = polyfit(points(:,1),points(:,2),1);
x = [min(points(:,1)) max(points(:,1))];
y = modelLeastSquares(1)*x + modelLeastSquares(2);
plot(x,y,'r-')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

MSAC 알고리즘을 사용하여 점에 선을 피팅합니다. 샘플 크기, 정상값의 최대 거리, 피팅 함수, 거리 계산 함수를 정의합니다. ransac를 호출하여 MSAC 알고리즘을 실행합니다.

sampleSize = 2; % number of points to sample per trial
maxDistance = 2; % max allowable distance for inliers

% Define the fit function using polyfit.
fitLineFcn = @(points)polyfit(points(:,1),points(:,2),1);

% Define the distance function to classify each point as an inlier or outlier
% based on the maxDistance threshold.
distLineFcn = @(model,points)(points(:, 2) - polyval(model, points(:,1))).^2;

[modelRANSAC,inlierIdx] = ransac(points,fitLineFcn,distLineFcn, ...
  sampleSize,maxDistance);

polyfit을 사용하여 선을 정상값에 다시 피팅합니다.

modelInliers = polyfit(points(inlierIdx,1),points(inlierIdx,2),1);

최종 피팅 선을 표시합니다. 이 선은 ransac가 식별하고 무시한 이상값에 대해 견고합니다.

inlierPts = points(inlierIdx,:);
x = [min(inlierPts(:,1)) max(inlierPts(:,1))];
y = modelInliers(1)*x + modelInliers(2);
plot(x, y, 'g-')
legend('Noisy points','Least squares fit','Robust fit');
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Noisy points, Least squares fit, Robust fit.

입력 인수

모두 축소

모델링할 데이터로, m×n 행렬로 지정됩니다. 각 행은 모델링할 세트의 데이터 점에 대응됩니다. 예를 들어, 2차원 점 세트를 모델링하는 경우 점 데이터를 m×2 행렬로 지정합니다.

데이터형: single | double

data의 서브셋에 대해 피팅할 함수로, 함수 핸들로 지정됩니다. 함수 형식은 다음과 같아야 합니다.

model = fitFcn(data)

데이터에 대해 여러 모델을 피팅할 수 있는 경우 fitFcn은 모델 파라미터를 셀형 배열로 반환합니다.

모델에서 데이터까지의 거리를 계산하는 함수로, 함수 핸들로 지정됩니다. 함수 형식은 다음과 같아야 합니다.

distances = distFcn(model,data)

model이 요소를 n개 가진 배열인 경우 distances는 m×n 행렬이어야 합니다. 그렇지 않은 경우 distancesm×1 벡터여야 합니다.

fitFcn에 필요한 data의 최소 샘플 크기로, 양의 정수 스칼라로 지정됩니다.

피팅 곡선에서 정상값 점까지의 최대 거리로, 양의 스칼라로 지정됩니다. 이 거리보다 멀리 있는 점은 모두 이상값으로 간주됩니다. 거리는 distFcn으로 정의됩니다. RANSAC 알고리즘은 소량의 점 샘플에서 피팅을 생성하지만 정상값 점의 개수를 최대화하려고 시도합니다. 최대 거리를 낮추면 정상값 점에 허용오차를 더 엄격하게 적용하여 피팅이 개선됩니다.

이름-값 인수

모두 축소

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

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'MaxNumTrials',2000

모델을 검증하는 함수로, 'ValidateModelFcn'과 함수 핸들이 쉼표로 구분되어 지정됩니다. 이 함수는 해당 모델이 함수에 정의된 기준에 부합하면 true를 반환합니다. 특정 피팅을 기각하려면 이 함수를 사용하십시오. 함수 형식은 다음과 같아야 합니다.

isValid = validateModelFcn(model,varargin)

함수를 지정하지 않으면 모든 모델이 유효한 것으로 간주됩니다.

유효한 모델을 생성하는 샘플을 찾기 위한 최대 시도 횟수로, 'MaxSamplingAttempts'와 정수가 쉼표로 구분되어 지정됩니다.

최대 무작위 시행 횟수로, 'MaxNumTrials'와 정수가 쉼표로 구분되어 지정됩니다. 각 시행은 data에서 최소 개수의 임의의 점을 사용하여 모델을 피팅합니다. 그런 다음 매 시행마다 모델에서 maxDistance 내에 있는 정상값의 개수를 확인합니다. 모든 시행이 실행된 후, 정상값 개수가 가장 많은 모델이 선택됩니다. 시행 횟수를 늘리면 출력 결과가 더 견고해지지만 그 대신 연산량이 늘어납니다.

최종 해가 모델 피팅을 위한 최대 정상값 개수를 찾는 신뢰도로, 'Confidence'와 함께 0에서 100까지의 스칼라가 쉼표로 구분되어 지정됩니다. 이 값을 늘리면 출력 결과가 더 견고해지지만 그 대신 연산량이 늘어납니다.

출력 인수

모두 축소

최적 피팅 모델로, fitFcn 입력에 정의된 파라미터로 반환됩니다. 이 모델은 모든 샘플 시도에서 정상값 개수를 최대화합니다.

정상값 점으로, 논리형 벡터로 반환됩니다. 벡터는 data와 길이가 같으며 각 요소는 해당 점이 maxDistance를 기준으로 모델 피팅에 대한 정상값인지 여부를 나타냅니다.

참고 문헌

[1] Torr, P. H. S., and A. Zisserman. "MLESAC: A New Robust Estimator with Application to Estimating Image Geometry." Computer Vision and Image Understanding. Vol. 18, Issue 1, April 2000, pp. 138–156.

확장 기능

모두 확장

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

버전 내역

R2017a에 개발됨