fitPolynomialRANSAC

Подгонка полинома к точкам с помощью RANSAC

Описание

пример

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

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

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

Примеры

свернуть все

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

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

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

Figure contains an axes. The axes with title Parabola contains an object of type line.

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

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')

Figure contains an axes. The axes with title Parabola with Outliers and Noise contains an object of type line.

Использование fitPolynomialRANSAC чтобы сгенерировать коэффициенты для полинома второй степени. Также получите инлиеры, идентифицированные заданным 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] точки. Отметьте выбросы красным кругом.

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

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Fit polynomial, Inlier points, Outlier points.

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

свернуть все

[x y] координатные точки, заданные как матрица m -by-2. Полином соответствует этим точкам.

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

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

<reservedrangesplaceholder1> <reservedrangesplaceholder0>2+ <reservedrangesplaceholder2> <reservedrangesplaceholder1> + C

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

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

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

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

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

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

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

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

isValid = validatePolynomialFcn(P,varargin)

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

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

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

свернуть все

Полиномиальные коэффициенты, возвращенные как вектор числовых скаляров. Каждый элемент соответствует константе в полиномиальном уравнении со степенью N. Для примера, для полинома второй степени, A x2+ <reservedrangesplaceholder2> <reservedrangesplaceholder1> + C:

P = [A B C];

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

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

Ссылки

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

См. также

| |

Введенный в R2017a