ransac

Подгонка модели к зашумленным данным

Описание

пример

[model,inlierIdx] = ransac(data,fitFcn,distFcn,sampleSize,maxDistance) подходит для модели с зашумленными данными, используя алгоритм консенсуса выборки M-estimator (MSAC), версию алгоритма консенсуса случайной выборки (RANSAC).

Задайте свою функцию для подбора кривой модели, fitFcn, и ваша функция для вычисления расстояний от модели до ваших данных, distFcn. The ransac функция берёт случайные выборки из вашего data использование sampleSize и использует функцию аппроксимации, чтобы максимизировать количество инлиеров в maxDistance.

[___] = ransac(___,Name,Value) дополнительно задает одно или несколько Name,Value аргументы в виде пар.

Примеры

свернуть все

Загрузите и постройте график набора шумных 2-D точек.

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

Figure contains an axes. The axes contains an object of type line.

Подгонка линии с помощью линейных методов наименьших квадратов. Из-за выбросов линия не является хорошей подгонкой.

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. The axes contains 2 objects of type line.

Подгонка линии к точкам с помощью алгоритма 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. The axes contains 3 objects of type line. These objects represent Noisy points, Least squares fit, Robust fit.

Входные параметры

свернуть все

Данные, которые будут смоделированы, заданы как матрица m -by n. Каждая строка соответствует точке данных в наборе, который будет смоделирован. Например, чтобы смоделировать набор 2-D точек, задайте данные точки как m матрицу -by 2.

Типы данных: single | double

Функция для соответствия подмножеству data, заданный как указатель на функцию. Функция должна иметь форму:

model = fitFcn(data)

Если возможно подгонять несколько моделей к данным, то fitFcn возвращает параметры модели в виде массива ячеек.

Функция для вычисления расстояний от модели до данных, заданная как указатель на функцию. Функция должна иметь форму:

distances = distFcn(model,data)

Если model является n элементом, тогда расстояния должны быть матрицей m -by n. В противном случае distances должен быть вектором m -by-1.

Минимальный размер выборки из data что требуется по fitFcn, заданный как положительное скалярное целое число.

Максимальное расстояние от кривой аппроксимации до точки инлиера, заданное как положительная скалярная величина. Любые точки, расположенные дальше этого расстояния, считаются выбросами. Алгоритм RANSAC создает подгонку из небольшой выборки точек, но пытается максимизировать количество inlier точек. Уменьшение максимального расстояния улучшает подгонку путем наложения более жесткого допуска на входные точки.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'MaxNumTrials',2000

Функция для проверки модели, заданная как разделенная разделенными запятой парами, состоящая из 'ValidateModelFcn'и указатель на функцию. Функция возвращается true если модель принята на основе критериев, определенных в функции. Используйте эту функцию, чтобы отклонить определенные подгонки. Функция должна иметь форму:

isValid = validateModelFcn(model,varargin)

Если функция не задана, все модели приняты допустимыми.

Максимальное количество попыток найти выборку, которая приводит к действительной модели, заданной как разделенная разделенными запятой парами, состоящая из 'MaxSamplingAttempts'и целое число.

Максимальное количество случайных испытаний, заданное как разделенная разделенными запятой парами, состоящая из 'MaxNumTrials'и целое число. Одно испытание использует минимальное количество случайных точек от data для подгонки модели. Затем испытание проверяет количество инлиеров в maxDistance из модели. После всех испытаний выбирается модель с наибольшим количеством инлиеров. Увеличение количества испытаний улучшает робастность выхода за счет дополнительных расчетов.

Доверие, что окончательное решение находит максимальное количество инлиеров для подгонки модели, заданное как разделенная запятой пара, состоящее из 'Confidence'и скаляром от 0 до 100. Увеличение этого значения улучшает робастность выхода за счет дополнительных расчетов.

Выходные аргументы

свернуть все

Лучшая модель подгонки, возвращенная как параметры, заданные в fitFcn вход. Эта модель максимизирует количество инлиеров из всех попыток выборки.

Inlier указывает, возвращается как логический вектор. Вектор имеет ту же длину, что и data, и каждый элемент указывает, является ли эта точка inlier для модели подгонки основанной на maxDistance.

Ссылки

[1] Торр, П. Х. С., и А. Циссерман. MLESAC: новый робастный оценщик с приложением для оценки геометрии изображения. Компьютерное зрение и понимание изображений. Том 18, выпуск 1, апрель 2000 года, стр. 138-156.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

См. также

| |

Введенный в R2017a