ransac

Подбирайте модель к зашумленным данным

Описание

пример

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

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

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

Примеры

свернуть все

Загрузите и постройте набор шумных 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 имя аргумента и 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