ransac

Подходящая модель к шумным данным

Синтаксис

[model,inlierIdx] = ransac(data,fitFcn,distFcn,sampleSize,maxDistance)

Описание

пример

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

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

Примеры

свернуть все

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

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. Задайте объем выборки, максимальное расстояние для inliers, подходящей функции и функции оценки расстояния. Вызовите 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);

Переоборудуйте строку к inliers использование 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

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

свернуть все

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

isValid = validateModelFcn(model,varargin)

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

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

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

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

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

свернуть все

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

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

Ссылки

[1] Торр, P. H. S. и А. Зиссермен. "MLESAC: Новое Устойчивое Средство оценки с Приложением к Оценке Геометрии Изображений". Компьютерное зрение и Распознавание изображений. Издание 18, Выпуск 1, апрель 2000, стр 138–156.

Смотрите также

| |

Введенный в R2017a