estimateFundamentalMatrix

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

Синтаксис

estimateFundamentalMatrix
F = estimateFundamentalMatrix(matchedPoints1,matchedPoints2)
[F,inliersIndex] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2)
[F,inliersIndex,status] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2)
[F,inliersIndex,status] = estimateFundamentalMatrix(matchedPoints1,matchedPoints2,Name,Value)

Описание

пример

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) дополнительные опции использования, заданные одним или несколькими Имя, аргументы пары Значения.

Примеры

свернуть все

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

Алгоритмы

свернуть все

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

Эта функция вычисляет основную матрицу с помощью нормированного алгоритма с восемью точками [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