このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ransac
ノイズを含むデータへのモデルの当てはめ
構文
説明
[
は、Random Sample Consensus (RANSAC) アルゴリズムの 1 バージョンである M-estimator Sample Consensus (MSAC) アルゴリズムを使用して、モデルをノイズを含むデータに当てはめます。model
,inlierIdx
] = ransac(data
,fitFcn
,distFcn
,sampleSize
,maxDistance
)
モデルの当てはめを行う関数 fitFcn
と、モデルからデータまでの距離を計算する関数 distFcn
を指定します。関数 ransac
は sampleSize
を使用して data
からランダムなサンプルを取得し、近似関数を使用して maxDistance
内のインライアの数を最大化します。
[___] = ransac(___,
はさらに、Name,Value
)Name,Value
ペアの引数を 1 つ以上指定します。
例
最小二乗および RANSAC アルゴリズムを使用した線の 2 次元点への当てはめ
一連のノイズを含む 2 次元点を読み込み、プロットします。
load pointsForLineFitting.mat plot(points(:,1),points(:,2),'o'); hold on
線形最小二乗法を使用して線を当てはめます。外れ値があるため、線はよく近似していません。
modelLeastSquares = polyfit(points(:,1),points(:,2),1);
x = [min(points(:,1)) max(points(:,1))];
y = modelLeastSquares(1)*x + modelLeastSquares(2);
plot(x,y,'r-')
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
入力引数
data
— モデル化するデータ
m 行 n 列の行列
モデル化するデータ。m 行 n 列の行列として指定します。各行は、モデル化するセット内の 1 つのデータ点に対応します。たとえば、一連の 2 次元の点をモデル化するには、m 行 2 列の行列として点データを指定します。
データ型: single
| double
fitFcn
— data
のサブセットを当てはめる関数
関数ハンドル
data
のサブセットを当てはめる関数。関数ハンドルとして指定します。関数は次の形式でなければなりません。
model = fitFcn(data)
複数のモデルをこのデータに当てはめることができる場合、fitFcn
はモデル パラメーターを cell 配列として返します。
distFcn
— モデルから距離を計算する関数
関数ハンドル
モデルからデータへの距離を計算する関数。関数ハンドルとして指定します。関数は次の形式でなければなりません。
distances = distFcn(model,data)
model
が n 要素配列の場合、距離は m 行 n 列の行列でなければなりません。それ以外の場合、distances
は m 行 1 列のベクトルでなければなりません。
maxDistance
— インライア点の最大距離
正のスカラー
近似曲線からインライア点までの最大距離。正のスカラーとして指定します。この距離より離れたところにある点はすべて外れ値と見なされます。RANSAC アルゴリズムは、少ない標本点から当てはめを作成しますが、インライア点の数を最大化しようとします。最大距離を短くすると、インライア点の許容誤差が厳しくなり近似が改善されます。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: 'MaxNumTrials',2000
ValidateModelFcn
— モデルを検証する関数
関数ハンドル
モデルを検証する関数。'ValidateModelFcn
' と関数ハンドルで構成されるコンマ区切りのペアとして指定します。関数で定義された条件に基づいてモデルが許容される場合、関数は true
を返します。この関数を使用して、特定の当てはめを棄却します。関数は次の形式でなければなりません。
isValid = validateModelFcn(model,varargin)
関数を指定しない場合、すべてのモデルが有効と見なされます。
MaxSamplingAttempts
— サンプリング試行の最大数
100 (既定値) | 整数
有効なモデルが得られる標本を探す試行の最大数。'MaxSamplingAttempts
' と整数で構成されるコンマ区切りのペアとして指定します。
MaxNumTrials
— ランダム試行の最大回数
1000
(既定値) | 整数
ランダム試行の最大回数。'MaxNumTrials
' と整数で構成されるコンマ区切りのペアとして指定します。1 回の試行で、data
から最小の数のランダム点を使用してモデルを当てはめます。その試行で、モデルから maxDistance
の内側にあるインライアの数がチェックされます。すべての試行が完了した後、インライアが最も多いモデルが選択されます。試行回数を多くすると出力のロバスト性は向上しますが、計算量が増加します。
Confidence
— 最終的な解の信頼度
99
(既定値) | 0 から 100 までのスカラー値
モデル近似において最終的な解が最も多いインライアを見つける信頼度。'Confidence
' と 0 ~ 100 のスカラーで構成されるコンマ区切りのペアとして指定します。この値を大きくすると出力のロバスト性は向上しますが、計算量が増加します。
出力引数
model
— 最も当てはまるモデル
fitFcn
で定義されたパラメーター
最も当てはまるモデル。fitFcn
入力で定義されたパラメーターとして返されます。このモデルは、すべてのサンプル試行からのインライアの数を最大化します。
inlierIdx
— インライア点
logical ベクトル
インライア点。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 で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)