exponenta event banner

fitPolynomialRANSAC

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

Описание

пример

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

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

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

Примеры

свернуть все

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

Ax2 + Bx + C

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

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

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

Укажите дополнительные пары, разделенные запятыми 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. Например, для многочлена второй степени Ax2 + Bx + C:

P = [A B C];

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

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

Ссылки

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

См. также

| |

Представлен в R2017a