exponenta event banner

ransac

Подгонка модели под шумные данные

Описание

пример

[model,inlierIdx] = ransac(data,fitFcn,distFcn,sampleSize,maxDistance) подходит модель для шумных данных с использованием алгоритма консенсуса выборки M-оценщика (MSAC), версии алгоритма консенсуса случайной выборки (RANSAC).

Укажите функцию для подгонки модели, fitFcnи ваша функция для расчета расстояний от модели до ваших данных, distFcn. ransac функция берет случайные выборки из вашего data использование sampleSize и использует функцию аппроксимации, чтобы максимизировать количество входов внутри maxDistance.

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

Примеры

свернуть все

Загрузите и постройте график набора шумных точек 2-D.

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. Определите размер выборки, максимальное расстояние для входов, функцию аппроксимации и функцию оценки расстояния. Звонить 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);

Перепрофилировать линию во внутренние линии с помощью 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. Каждая строка соответствует точке данных в моделируемом наборе. Например, для моделирования набора точек 2-D укажите данные точек в виде матрицы m-by-2.

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

Функция для поднабора data, указанный как дескриптор функции. Функция должна иметь вид:

model = fitFcn(data)

Если существует возможность подгонки нескольких моделей к данным, то fitFcn возвращает параметры модели в виде массива ячеек.

Функция для вычисления расстояний от модели до данных, заданная как дескриптор функции. Функция должна иметь вид:

distances = distFcn(model,data)

Если model является массивом n-элементов, тогда расстояния должны быть матрицей m-на-n. В противном случае distances должен быть вектором m-by-1.

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

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

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

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

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

Функция проверки модели, заданная как разделенная запятыми пара, состоящая из 'ValidateModelFcnи дескриптор функции. Функция возвращает true если модель принята на основе критериев, определенных в функции. Эта функция используется для отклонения определенных посадок. Функция должна иметь вид:

isValid = validateModelFcn(model,varargin)

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

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

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

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

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

свернуть все

Модель наилучшего вписывания, возвращенная как параметры, определенные в fitFcn вход. Эта модель максимизирует количество входов из всех попыток выборки.

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

Ссылки

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

| |

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