estimateFundamentalMatrix

Оцените фундаментальную матрицу из соответствующих точек в стерео изображений

Описание

пример

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

пример

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

[F,inliersIndex] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2) дополнительно возвращает логические индексы, inliersIndex, для инлиеров, используемых для вычисления основной матрицы. The 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');

Figure contains an axes. The axes with title Putative point matches contains 4 objects of type image, line.

Отображение точек inlier.

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

Figure contains an axes. The axes with title Point matches after outliers were removed contains 4 objects of type image, line.

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

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

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

свернуть все

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

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

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

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

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

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

Norm8PointНормализованный алгоритм из восьми точек. Чтобы получить надежные результаты, входы, matchedPoints1 и matchedPoints2 должен точно совпадать.
LMedSНаименьшая медиана квадратов. Выберите этот метод, если вы знаете, что по крайней мере 50% точек в matchedPoints1 и matchedPoints2 являются инкрустаторами.
RANSACRANdom SAmple Consensus. Выберите этот метод, если вы хотите задать порог расстояния для инлиеров.
MSACM-estimator SAmple Consensus. Выберите метод M-estimator SAmple Consensus, если вы хотите задать порог расстояния для инлиеров. Обычно метод MSAC сходится быстрее, чем метод RANSAC.
LTSНаименьшие обрезанные квадраты. Выберите метод наименьших обрезанных квадратов, если вы знаете минимальный процент инлиеров в 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.

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

Минимальный процент инлиеров во входных точках, заданный как разделенная разделенными запятой парами, состоящая из 'InlierPercentage'и процентное скалярное значение в области значений (0 100). Задайте минимальный процент инлиеров в 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 и их проекциями на 2-D изображения, которые приводят к ограничениям между точками изображения. Два изображения одной и той же сцены связаны эпиполярной геометрией.

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

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

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

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

Типы данных: 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 = мин (N, log(1p)log(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-й записи вектора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 представляет указанный вами конечный процент. Чем меньше значение, тем лучше фитнес.

Ссылки

[1] Hartley, R., A. Zisserman, Multiple View Geometry in Компьютерное Зрение, Cambridge University Press, 2003.

[2] Rousseeuw, P., A. Leroy, Robust Regression and Outlier Detection, John Wiley & Sons, 1987.

[3] Torr, P. H. S., and A. Zisserman, MLESAC: Новый робастный оценщик с приложением для оценки геометрии изображений, компьютерного зрения и понимания изображений, 2000.

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

.
Введенный в R2012b