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

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. Задайте объем выборки, максимальное расстояние для 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

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

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

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

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

| |

Введенный в R2017a