fitPolynomialRANSAC

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

Синтаксис

P = fitPolynomialRANSAC(xyPoints,N,maxDistance)
[P,inlierIdx] = fitPolynomialRANSAC(___)
[___] = fitPolynomialRANSAC(___,Name,Value)

Описание

пример

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].

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]. Отметьте выбросы с красным кругом.

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