Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ransac

ノイズを含むデータへのモデルの当てはめ

説明

[model,inlierIdx] = ransac(data,fitFcn,distFcn,sampleSize,maxDistance) は、Random Sample Consensus (RANSAC) アルゴリズムの 1 バージョンである M-estimator Sample Consensus (MSAC) アルゴリズムを使用して、モデルをノイズを含むデータに当てはめます。

モデルの当てはめを行う関数 fitFcn と、モデルからデータまでの距離を計算する関数 distFcn を指定します。関数 ransacsampleSize を使用して data からランダムなサンプルを取得し、近似関数を使用して maxDistance 内のインライアの数を最大化します。

[___] = ransac(___,Name,Value) はさらに、Name,Value ペアの引数を 1 つ以上指定します。

すべて折りたたむ

一連のノイズを含む 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

fitLineFcn = @(points) polyfit(points(:,1),points(:,2),1); % fit function using polyfit
evalLineFcn = ...   % distance evaluation function
  @(model, points) sum((points(:, 2) - polyval(model, points(:,1))).^2,2);

[modelRANSAC, inlierIdx] = ransac(points,fitLineFcn,evalLineFcn, ...
  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 列の行列として指定します。各行は、モデル化するセット内の 1 つのデータ点に対応します。たとえば、一連の 2 次元の点をモデル化するには、m 行 2 列の行列として点データを指定します。

データ型: single | double

data のサブセットを当てはめる関数。関数ハンドルとして指定します。関数は次の形式でなければなりません。

model = fitFcn(data)

複数のモデルをこのデータに当てはめることができる場合、fitFcn はモデル パラメーターを cell 配列として返します。

モデルからデータへの距離を計算する関数。関数ハンドルとして指定します。関数は次の形式でなければなりません。

distances = distFcn(model,data)

model が n 要素配列の場合、距離は m 行 n 列の行列でなければなりません。それ以外の場合、distances は m 行 1 列のベクトルでなければなりません。

整数 fitFcn によって要求される data からの最小標本サイズ。正のスカラー整数として指定します。

近似曲線からインライア点までの最大距離。正のスカラーとして指定します。この距離より離れたところにある点はすべて外れ値と見なされます。RANSAC アルゴリズムは、少ない標本点から当てはめを作成しますが、インライア点の数を最大化しようとします。最大距離を短くすると、インライア点の許容誤差が厳しくなり近似が改善されます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'MaxNumTrials',2000

モデルを検証する関数。'ValidateModelFcn' と関数ハンドルで構成されるコンマ区切りのペアとして指定します。関数で定義された条件に基づいてモデルが許容される場合、関数は true を返します。この関数を使用して、特定の当てはめを棄却します。関数は次の形式でなければなりません。

isValid = validateModelFcn(model,varargin)

関数を指定しない場合、すべてのモデルが有効と見なされます。

有効なモデルが得られる標本を探す試行の最大数。'MaxSamplingAttempts' と整数で構成されるコンマ区切りのペアとして指定します。

ランダム試行の最大回数。'MaxNumTrials' と整数で構成されるコンマ区切りのペアとして指定します。1 回の試行で、data から最小の数のランダム点を使用してモデルを当てはめます。その試行で、モデルから maxDistance の内側にあるインライアの数がチェックされます。すべての試行が完了した後、インライアが最も多いモデルが選択されます。試行回数を多くすると出力のロバスト性は向上しますが、計算量が増加します。

モデル近似において最終的な解が最も多いインライアを見つける信頼度。'Confidence' と 0 ~ 100 のスカラーで構成されるコンマ区切りのペアとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。

出力引数

すべて折りたたむ

最も当てはまるモデル。fitFcn 入力で定義されたパラメーターとして返されます。このモデルは、すべてのサンプル試行からのインライアの数を最大化します。

インライア点。logical ベクトルとして返されます。ベクトルは 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 で導入