estimateFundamentalMatrix

Оцените основную матрицу от соответствующих точек в стереоизображениях

Описание

пример

estimateFundamentalMatrix оценивает основную матрицу от соответствующих точек в стереоизображениях. Эта функция может быть сконфигурирована, чтобы использовать все соответствующие точки или исключить выбросы. Можно исключить выбросы при помощи устойчивого метода оценки, такие как согласие случайной выборки (RANSAC). Когда вы используете устойчивую оценку, результаты не могут быть идентичными между запусками из-за рандомизированной природы алгоритма.

пример

F = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) возвращает 3х3 основную матрицу, F, использование наименее среднего из квадратов (LMedS) метод. Точками ввода может быть M-by-2 матрицы количества M [x y] координаты или KAZEPoints, SURFPoints, MSERRegions, ORBPoints, или cornerPoints объект.

[F,inliersIndex] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) дополнительно возвращает логические индексы, inliersIndex, поскольку inliers использовался для расчета основной матрицы. inliersIndex выходом является M-by-1 вектор. Функция устанавливает элементы вектора к true когда соответствующая точка была использована для расчета основная матрица. Элементы установлены в false если они не используются.

[F,inliersIndex,status] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) дополнительно возвращает код статуса.

[F,inliersIndex,status] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value.

Примеры

свернуть все

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

Загрузите точки стерео.

load stereoPointPairs

Оцените основную матрицу.

fRANSAC = estimateFundamentalMatrix(matchedPoints1,...
    matchedPoints2,'Method','RANSAC',...
    'NumTrials',2000,'DistanceThreshold',1e-4)
fRANSAC = 3×3

    0.0000   -0.0004    0.0348
    0.0004    0.0000   -0.0937
   -0.0426    0.0993    0.9892

Загрузите предполагаемо совпадающие точки.

load stereoPointPairs
[fLMedS, inliers] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2,'NumTrials',2000)
fLMedS = 3×3

    0.0000   -0.0004    0.0349
    0.0004    0.0000   -0.0938
   -0.0426    0.0994    0.9892

inliers = 18x1 logical array

   1
   1
   1
   1
   1
   1
   0
   1
   0
   0
      ⋮

Загрузите стереоизображения.

I1 = imread('viprectification_deskLeft.png');
I2 = imread('viprectification_deskRight.png');

Покажите предполагаемо совпадающие точки.

figure;
showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2,'montage','PlotOptions',{'ro','go','y--'});
title('Putative point matches');

Покажите точки inlier.

figure;
showMatchedFeatures(I1, I2, matchedPoints1(inliers,:),matchedPoints2(inliers,:),'montage','PlotOptions',{'ro','go','y--'});
title('Point matches after outliers were removed');

Загрузите пары точки стерео.

load stereoPointPairs

Вычислите основную матрицу для точек ввода, которые не содержат выбросов.

inlierPts1 = matchedPoints1(knownInliers,:);
inlierPts2 = matchedPoints2(knownInliers,:);
fNorm8Point = estimateFundamentalMatrix(inlierPts1,inlierPts2,'Method','Norm8Point')
fNorm8Point = 3×3

    0.0000   -0.0004    0.0348
    0.0004    0.0000   -0.0937
   -0.0426    0.0993    0.9892

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

свернуть все

Координаты соответствующих точек в изображении один, заданный как M-by-2 матрица количества M [x y] координаты, или как KAZEPoints, SURFPoints, MSERRegions, ORBPoints, или cornerPoints объект. matchedPoints1 введите должен содержать точки, которые не лежат на одной плоской поверхности, (например, стена, таблица или книга) и являются предполагаемо соответствующими при помощи функции, такой как matchFeatures.

Координаты соответствующих точек в изображении два, заданный как M-by-2 матрица количества M [x y] координаты, или как KAZEPoints, SURFPoints, MSERRegions, ORBPoints, или cornerPoints объект. matchedPoints2 введите должен содержать точки, которые не лежат на одной плоской поверхности, (например, стена, таблица или книга) и являются предполагаемо соответствующими при помощи функции, такой как matchFeatures

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

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

Пример: 'Method', 'RANSAC'задает RANSAC как метод, чтобы вычислить основную матрицу.

Метод использовался для расчета основной матрицы, заданной как разделенная запятой пара, состоящая из 'Method'и одно из следующего:

Norm8PointНормированный алгоритм с восемью точками. Приводить к надежным результатам, входным параметрам, matchedPoints1 и matchedPoints2 должен соответствовать точно.
LMedSНаименьшее количество Медианы Квадратов. Выберите этот метод, если вы знаете что по крайней мере 50% точек в matchedPoints1 и matchedPoints2 inliers.
RANSACСогласие Случайной выборки. Выберите этот метод, если требуется установить порог расстояния для inliers.
MSACДемонстрационное Согласие M-средства-оценки. Выберите Демонстрационный метод Согласия M-средства-оценки, если требуется установить порог расстояния для inliers. Обычно метод MSAC сходится более быстро, чем метод RANSAC.
LTSНаименьшее количество Обрезанных Квадратов. Выберите Наименее обрезанный метод Квадратов, если вы знаете минимальный процент inliers в matchedPoints1 и matchedPoints2. Обычно метод LTS сходится более быстро, чем метод LMedS.

Приводить к надежным результатам с помощью Norm8Point алгоритм, входные параметры, matchedPoints1 и matchedPoints2, должен соответствовать точно. Другие методы могут терпеть выбросы и поэтому только потребовать предполагаемо соответствующих точек ввода. Можно получить предполагаемо соответствующие точки при помощи matchFeatures функция.

Основной матричный класс, заданный как разделенная запятой пара, состоящая из 'OutputClass'и любой 'double' или 'single'. Это задает класс для основной матрицы и внутренних расчетов функции.

Количество случайных испытаний за нахождение выбросов, заданных как разделенная запятой пара, состоящая из 'NumTrials'и целочисленное значение. Этот параметр применяется, когда вы устанавливаете Method параметр к LMedS, RANSAC, MSAC, или LTS.

Когда вы устанавливаете Method параметр к любому LMedS или LTS, функция использует фактическое количество испытаний как значение параметров.

Когда вы устанавливаете Method параметр к любому RANSAC или MSAC, функция использует максимальное количество испытаний как значение параметров. Фактическое количество испытаний зависит от matchedPoints1, matchedPoints2, и значение Confidence параметр.

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

Алгебраический или тип расстояния Сэмпсона, заданный как разделенная запятой пара, состоящая из 'DistanceType'и любой Algebraic или Sampson. Тип расстояния определяет, является ли пара точек inlier или выбросом. Этот параметр применяется, когда вы устанавливаете Method параметр к LMedS, RANSAC, MSAC, или LTS.

Примечание

Для более быстрых расчетов, установленных этот параметр на Algebraic. Для геометрического расстояния, установленного этот параметр на Sampson.

Типы данных: char

Порог расстояния для нахождения выбросов, заданных как разделенная запятой пара, состоящая из 'DistanceThreshold'и положительное значение. Этот параметр применяется, когда вы устанавливаете Method параметр к RANSAC или MSAC.

Желаемая уверенность для нахождения максимального количества inliers, заданного как разделенная запятой пара, состоящая из 'Confidence'и скалярное значение процента в области значений (0 100). Этот параметр применяется, когда вы устанавливаете Method параметр к RANSAC или MSAC.

Минимальный процент inliers в точках ввода, заданных как разделенная запятой пара, состоящая из 'InlierPercentage'и скалярное значение процента в области значений (0 100). Задайте минимальный процент inliers в matchedPoints1 и matchedPoints2. Этот параметр применяется, когда вы устанавливаете Method параметр к LTS.

Сообщите об ошибке периода выполнения, заданной как разделенная запятой пара, состоящая из 'ReportRuntimeError'и логическое значение. Установите этот параметр на true сообщить об ошибках времени выполнения, когда функция не может вычислить основную матрицу из matchedPoints1 и matchedPoints2. Когда вы устанавливаете этот параметр на false, можно проверять status выведите, чтобы проверить валидность основной матрицы.

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

свернуть все

Основная матрица, возвращается как 3х3 матрица, которая вычисляется из точек во входных параметрах matchedPoints1 и matchedPoints2.

[P21]*FundamentalMatrix*[P11]'=0

P1, точка в matchedPoints1 из изображения 1 в пикселях, соответствует точке, P2, точке в matchedPoints2 в изображении 2.

В компьютерном зрении основная матрица является 3х3 матрицей, которая связывает соответствующие точки в стереоизображениях. Когда две камеры просматривают 3-D сцену из двух отличных положений, существует много геометрических отношений между 3-D точками и их проекциями на 2D изображения, которые приводят к ограничениям между точками изображений. Два изображения той же сцены связаны epipolar геометрией.

Индекс Inliers, возвращенный как M-by-1 логический вектор индекса. Набор элемента к true средние значения, что соответствующие индексируемые совпадающие точки в matchedPoints1 и matchedPoints2 были использованы для расчета основная матрица. Набор элемента к false означает, что индексируемые точки не использовались в расчете.

Типы данных: логический

Код статуса, возвращенный как одно из следующих возможных значений:

состояниеЗначение
0:Никакая ошибка.
1:matchedPoints1 и matchedPoints2 не содержите достаточно точек. Norm8Point, RANSAC, и MSAC потребуйте по крайней мере 8 точек, LMedS 16 точек и LTS требует ceil(800/InlierPercentage).
2:Недостаточно inliers найдено.

Типы данных: int32

Советы

Используйте estimateEssentialMatrix когда вы знаете внутренние параметры камеры. Можно получить внутренние параметры с помощью приложения Camera Calibrator. В противном случае можно использовать estimateFundamentalMatrix функция, которая не требует внутренних параметров камеры. Обратите внимание на то, что основная матрица не может быть оценена от компланарных мировых точек.

Алгоритмы

свернуть все

Вычисление основной матрицы

Эта функция вычисляет основную матрицу с помощью нормированного алгоритма с восемью точками [1]

Когда вы выбираете Norm8Point метод, функция использует все точки в matchedPoints1 и matchedPoints2 вычислить основную матрицу.

Когда вы выбираете любой другой метод, функция использует следующий алгоритм, чтобы исключить выбросы и вычислить основную матрицу из inliers:

  1. Инициализируйте основную матрицу, F, к 3х3 матрице нулей.

  2. Установите счетчик цикла n, чтобы обнулить, и количество циклов N, к количеству случайных заданных испытаний.

  3. Цикл через следующие шаги, в то время как n <N:

    1. Случайным образом выберите 8 пар точек от matchedPoints1 и matchedPoints2.

    2. Используйте выбранные 8 точек, чтобы вычислить основную матрицу, f, при помощи нормированного алгоритма с 8 точками.

    3. Вычислите фитнес f для всех точек в matchedPoints1 и matchedPoints2.

    4. Если фитнес f лучше, чем F, замена F с f.

      Для RANSAC и MSAC, обновите N.

    5. n = n + 1

Количество случайных выборок для RANSAC и методов MSAC

RANSAC и методы MSAC обновляют количество случайных испытаний N для каждой итерации в цикле алгоритма. Функция сбрасывает N, согласно следующему:

N = min (N, журнал(1p)журнал(1r8)).
Где, p представляет параметр уверенности, вы задали, и r вычисляется можно следующим образом:
iNsgn(dui,vi),t)/N, где sgn(a,b)=1 если ab и 0 в противном случае.
Когда вы используете RANSAC или MSAC, результаты не могут быть идентичными между запусками из-за рандомизированной природы алгоритма.

Типы расстояния

Функция обеспечивает два типа расстояния, алгебраическое расстояние и расстояние Сэмпсона, чтобы измерить расстояние пары точек согласно основной матрице. Следующие уравнения используются в каждом типе с u, представляющим matchedPoints1 и v, представляющий matchedPoints2.

Алгебраическое расстояние:d(ui,vi)=(viFuiT)2
Расстояние Сэмпсона:d(ui,vi)=(viFuiT)2[1(FuiT)12+(FuiT)22+1(viF)12+(viF)22]

где i представляет индекс соответствующих точек, и (FuiT)j2, квадрат j-th запись вектора FuiT.

Фитнес основной матрицы для соответствующих точек

Следующая таблица подводит итог, как каждый метод определяет фитнес вычисленной основной матрицы:

МетодМера фитнеса
LMedSmedian(d(ui,vi);i=1:N), количество точек ввода. Чем меньший значение, тем лучше фитнес.
RANSACiNsgn(dui,vi),t)/N, где sgn(a,b)=1 если ab и 0 в противном случае t представляет заданный порог. Чем больше значение, тем лучше фитнес.
MSACiNmin(d(ui,vi),t). Чем меньший значение, тем лучше фитнес.
LTS iεΩd(ui,vi), где Ω первое самое низкое значение (N x q) пара точек. Где q представляет inlier процент, вы задали. Чем меньший значение, тем лучше фитнес.

Ссылки

[1] Хартли, R., А. Зиссермен, несколько просматривают геометрию в компьютерном зрении, издательстве Кембриджского университета, 2003.

[2] Rousseeuw, P., А. Лерой, устойчивая регрессия и Outlier Detection, John Wiley & Sons, 1987.

[3] Торр, P. H. S., и А. Зиссермен, MLESAC: новое устойчивое средство оценки с приложением к оценке геометрии изображений, компьютерного зрения и распознавания изображений, 2000.

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

Представленный в R2012b