fitPolynomialRANSAC

Соответствуйте полиному к точкам с помощью RANSAC

Описание

пример

P = fitPolynomialRANSAC(xyPoints,N,maxDistance) находит полиномиальные коэффициенты, P, путем выборки маленького набора точек, данного в xyPoints и генерация аппроксимаций полиномом. Подгонка, которая имеет большую часть inliers в maxDistance возвращен. Если подгонка не может быть найдена, то P возвращен пустой. Функция использует демонстрационное согласие M-средства-оценки (MSAC) алгоритм, изменение согласия случайной выборки (RANSAC) алгоритм, чтобы соответствовать данным.

[P,inlierIdx] = fitPolynomialRANSAC(___) возвращает логический массив, inlierIdx, это задает индексы для точек данных, которые являются inliers к подходящему полиному на основе maxDistance. Используйте входные параметры от предыдущего синтаксиса.

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

Примеры

свернуть все

Используйте алгоритм RANSAC, чтобы сгенерировать полином, который соответствует набору зашумленных данных. fitPolynomialRANSAC функция генерирует полином путем выборки маленького набора точек от [x y] укажите данные и генерирующий аппроксимации полиномом. Подгонка с большей частью inliers в maxDistance возвращен.

Создайте и постройте параболу с [x y] 'points'.

x = (-10:0.1:10)';
y = (36-x.^2)/9;
figure
plot(x,y)
title('Parabola')

Добавьте шум, и выброс указывает на точки на параболе.

y = y+rand(length(y),1);
y([50,150,99,199]) = [y(50)+12,y(150)-12,y(99)+33,y(199)-23];

plot(x,y)
title('Parabola with Outliers and Noise')

Используйте fitPolynomialRANSAC сгенерировать коэффициенты для полинома второй степени. Также идентифицируйте inliers заданным maxDistance от аппроксимации полиномом.

N = 2;           % second-degree polynomial
maxDistance = 1; % maximum allowed distance for a point to be inlier

[P, inlierIdx] = fitPolynomialRANSAC([x,y],N,maxDistance);

Оцените полином с помощью polyval. Постройте кривую и наложите [x y] 'points'. Отметьте выбросы с красным кругом.

yRecoveredCurve = polyval(P,x);
figure
plot(x,yRecoveredCurve,'-g','LineWidth',3)
hold on
plot(x(inlierIdx),y(inlierIdx),'.',x(~inlierIdx),y(~inlierIdx),'ro')
legend('Fit polynomial','Inlier points','Outlier points')
hold off

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

свернуть все

[x y] скоординируйте точки в виде m-by-2 матрица. Полином является подходящим к этим точкам.

Типы данных: double | single | uint32 | int32 | uint16 | int16

Степень аппроксимации полиномом, PВ виде целого числа. Степень полинома является самой высокой степенью условий в уравнении. Например, полином степени 2:

A x 2+Bx+C

A, B и C являются константами. В общем случае более высокие полиномы степени допускают лучшую подгонку, но подгонка зависит от ваших данных.

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

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

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

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

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

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

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

isValid = validatePolynomialFcn(P,varargin)

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

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

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

свернуть все

Полиномиальные коэффициенты, возвращенные как вектор числовых скаляров. Каждый элемент соответствует константе в полиномиальном уравнении со степенью N. Например, для полинома второй степени, A x 2+Bx+C:

P = [A B C];

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

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

Ссылки

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

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

| |

Введенный в R2017a