stringtranslate.com

Консенсус случайной выборки

Консенсус случайной выборки ( RANSAC ) — это итерационный метод оценки параметров математической модели на основе набора наблюдаемых данных, содержащих выбросы , при этом выбросы не должны оказывать никакого влияния на значения оценок. Следовательно, его также можно интерпретировать как метод обнаружения выбросов. [1] Это недетерминированный алгоритм в том смысле, что он дает разумный результат только с определенной вероятностью, причем эта вероятность увеличивается по мере увеличения количества итераций. Алгоритм был впервые опубликован Фишлером и Боллесом в SRI International в 1981 году. Они использовали RANSAC для решения проблемы определения местоположения (LDP), цель которой состоит в том, чтобы определить точки в пространстве, которые проецируются на изображение в набор ориентиров с известные места.

RANSAC использует повторяющуюся случайную подвыборку . [2] Основное предположение состоит в том, что данные состоят из «внутренних значений», то есть данных, распределение которых можно объяснить некоторым набором параметров модели, хотя и могут быть подвержены шуму, и «выбросов», которые представляют собой данные, которые не соответствуют модель. Выбросы могут возникать, например, из-за экстремальных значений шума, ошибочных измерений или неверных гипотез об интерпретации данных. RANSAC также предполагает, что при наличии (обычно небольшого) набора исходных данных существует процедура, которая может оценить параметры модели, которая оптимально объясняет или соответствует этим данным.

Пример

Простой пример — подгонка линии в двух измерениях к набору наблюдений. Предполагая, что этот набор содержит как inliers , т. е. точки, которые приблизительно могут быть подогнаны к линии, так и выбросы , точки, которые не могут быть подогнаны к этой линии, простой метод наименьших квадратов для подгонки линии обычно дает линию с плохой подгонкой к линии. данные, включая выбросы и выбросы. Причина в том, что он оптимально подходит ко всем точкам, включая выбросы. С другой стороны, RANSAC пытается исключить выбросы и найти линейную модель, которая использует в своих расчетах только выбросы. Это делается путем подбора линейных моделей к нескольким случайным выборкам данных и возврата модели, которая лучше всего соответствует подмножеству данных. Поскольку вставки имеют тенденцию быть более линейно связанными, чем случайная смесь вставок и выбросов, случайное подмножество, полностью состоящее из вставок, будет иметь наилучшее соответствие модели. На практике нет никакой гарантии, что подмножество вкладок будет выбрано случайным образом, и вероятность успеха алгоритма зависит от доли вкладок в данных, а также от выбора нескольких параметров алгоритма.

Обзор

Алгоритм RANSAC — это метод обучения для оценки параметров модели путем случайной выборки наблюдаемых данных. Учитывая набор данных, элементы данных которого содержат как выбросы, так и выбросы, RANSAC использует схему голосования, чтобы найти оптимальный результат подбора. Элементы данных в наборе данных используются для голосования за одну или несколько моделей. Реализация этой схемы голосования основана на двух предположениях: зашумленные функции не будут последовательно голосовать за какую-либо одну модель (несколько выбросов) и что имеется достаточно функций, чтобы договориться о хорошей модели (немного недостающих данных). Алгоритм RANSAC по существу состоит из двух шагов, которые итеративно повторяются:

  1. На первом этапе из входного набора данных случайным образом выбирается выборочное подмножество, содержащее минимальное количество элементов данных. Подходящая модель с параметрами модели рассчитывается с использованием только элементов этого подмножества выборки. Мощность подмножества выборки (например, количество данных в этом подмножестве) достаточна для определения параметров модели.
  2. На втором этапе алгоритм проверяет, какие элементы всего набора данных соответствуют модели, созданной с помощью оцененных параметров модели, полученных на первом этапе. Элемент данных будет рассматриваться как выброс, если он не соответствует модели в пределах некоторого порога ошибки, определяющего максимальное отклонение данных для выбросов. (Элементы данных, выходящие за пределы этого отклонения, являются выбросами.)

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

Входными данными для алгоритма RANSAC является набор значений наблюдаемых данных, модель, соответствующая наблюдениям, и некоторые доверительные параметры, определяющие выбросы. Если говорить более подробно, чем вышеупомянутый обзор алгоритма RANSAC, RANSAC достигает своей цели, повторяя следующие шаги:

  1. Выберите случайное подмножество исходных данных. Назовите это подмножество гипотетическими вкладышами .
  2. Модель подгоняется к набору гипотетических вкладышей.
  3. Затем все данные проверяются на соответствие подобранной модели. Все точки данных (исходных данных), которые хорошо соответствуют оцененной модели, в соответствии с некоторой функцией потерь , специфичной для модели , называются консенсусным набором (т. е. набором вкладок для модели).
  4. Предполагаемая модель является достаточно хорошей, если достаточно много точек данных были классифицированы как часть консенсусного набора.
  5. Модель можно улучшить, переоценив ее с использованием всех членов консенсусного набора. Качество подгонки как мера того, насколько хорошо модель соответствует согласованному набору, будет использоваться для уточнения подгонки модели по мере продолжения итераций (например, путем установки этой меры в качестве критерия качества подгонки на следующей итерации).

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

Псевдокод

Общий алгоритм RANSAC работает как следующий псевдокод :

Данный: данные – набор наблюдений. модель – модель для объяснения наблюдаемых точек данных. n – минимальное количество точек данных, необходимое для оценки параметров модели. k – максимальное количество итераций, разрешенное в алгоритме. t – пороговое значение для определения точек данных, которые хорошо подходят модели (внутреннее значение). d – количество близких точек данных (внутренних значений), необходимых для подтверждения того, что модель хорошо соответствует данным.Возвращаться: bestFit — параметры модели, которые лучше всего соответствуют данным (или равны нулю, если подходящая модель не найдена).итерации = 0bestFit = нольbestErr = что-то действительно большое // Этот параметр используется для уточнения параметров модели до наилучшего соответствия данным по мере продолжения итераций.в то время как  итерации < k  делают MaybeInliers := n случайно выбранных значений из данных MaybeModel: = параметры модели, соответствующие MaybeInliers подтвержденныеInliers:= пустой набор для каждой точки в данных делать,  если точка соответствует возможной модели с ошибкой меньше t, тогда добавить точку в подтвержденныевставки end if  end for,  если количество элементов в подтвержденныхInliers > d, тогда // Это означает, что мы, возможно, нашли хорошую модель. // Теперь проверим, насколько это хорошо. BetterModel: = параметры модели, соответствующие всем точкам в подтвержденных Inliers thisErr := мера того, насколько хорошо BetterModel соответствует этим точкам если thisErr < bestErr , то bestFit := BetterModel bestErr := thisErr конец, если  конец, если увеличение итерацийзакончиться, покавернуть bestFit

Пример кода

Реализация Python, отражающая псевдокод. Это также определяет LinearRegressorметод наименьших квадратов, применимый RANSACк задаче двумерной регрессии и визуализирующий результат:

из  копирования  импорта  копирования импорта  numpy  как  np из  numpy.random  import  default_rng rng  =  default_rng ()класс  RANSAC :  def  __init__ ( self ,  n = 10 ,  k = 100 ,  t = 0,05 ,  d = 10 ,  модель = None ,  потеря = None ,  метрика = None ):  self . n  =  n  # `n`: Минимальное количество точек данных для оценки параметров  self . k  =  k  # `k`: Максимально допустимое количество итераций  self . t  =  t  # `t`: Пороговое значение, позволяющее определить, подходят ли точки  самостоятельно . d  =  d  # `d`: количество близких точек данных, необходимое для утверждения, что модель хорошо подходит  self . model  =  model  # `model`: класс, реализующий `fit` и `predict`  self . loss  =  loss  # `loss`: функция `y_true` и `y_pred`, которая возвращает вектор  self . metric  =  metric  # `metric`: функция `y_true` и `y_pred` и возвращает число с плавающей точкой  self . best_fit  =  Нет  себя . best_error  =  np . инфа def  fit ( self ,  X ,  y ):  для  _  в  диапазоне ( self . k ):  ids  =  rng . перестановка ( X . форма [ 0 ]) may_inliers  =  ids [:  self . n ]  возможно_модель  =  копия ( self . model ) . подходит ( X [ возможно_вставки ],  y [ возможно_вставки ]) пороговый  =  (  self . loss ( y [ ids ][ self . n  :],  may_model . предсказать ( X [ ids ][ self . n  :]))  <  self . t  ) inlier_ids  =  идентификаторы [ self . п  :][ нп . плоский ненулевой ( пороговый ) . сгладить ()] если  inlier_ids . размер  >  сам . d :  inlier_points  =  np . hstack ([ возможно_inliers ,  inlier_ids ])  Better_model  =  копия ( self . model ) . подходит ( X [ inlier_points ],  y [ inlier_points ]) this_error  =  self . метрика (  y [ inlier_points ],  Better_model . предсказать ( X [ inlier_points ])  ) если  эта_ошибка  <  self . best_error :  сам . best_error  =  this_error  self . наилучшая_подходящая  =  лучшая_модель вернуть  себя def  предсказать ( self ,  X ):  вернуть  себя . наиболее подходящий . предсказать ( X )def  Square_error_loss ( y_true ,  y_pred ):  return  ( y_true  -  y_pred )  **  2def  mean_square_error ( y_true ,  y_pred ):  return  np . сумма ( quad_error_loss ( y_true ,  y_pred ))  /  y_true . форма [ 0 ]класс  LinearRegressor :  def  __init__ ( self ):  self . параметры  =  Нет def  fit ( self ,  X :  np . ndarray ,  y :  np . ndarray )  : r ,  _  =  X. форма X = np . hstack ([ np . ones (( r , 1 )), X ]) self . параметры = НП . линалг . инв ( Икс . Т @ Икс ) @ Икс . Т @ й вернись сам                 def  предсказать ( self ,  X :  np . ndarray )  : r ,  _  =  X. форма X = np . hstack ([ np . ones (( r , 1 )), X ]) return X @ self . параметры         если  __name__  ==  "__main__" : регрессор  =  RANSAC ( модель = LinearRegressor (),  потеря = квадрат_ошибка_лосс ,  метрика = средняя_квадрат_ошибка ) Х  =  НП . массив ([ - 0.848 , - 0.800 , - 0.704 , - 0.632 , - 0.488 , - 0.472 , - 0.368 , - 0.336 , - 0.280 , - 0.200 , - 0.00800 , - 0.0840 , 0.0240 , 0,100 , 0,124 , 0,148 , 0,232 , 0,236 , 0.324 , 0.356 , 0.368 , 0.440 , 0.512 , 0.548 , 0.660 , 0.640 , 0.712 , 0.752 , 0.776 , 0.880 , 0.920 , 0.944 , - 0.108 , - 0,168 , - 0,720 , - 0,784 , - 0,224 , - 0,604 , - 0,740 , - 0.0440 , 0.388 , - 0.0200 , 0.752 , 0.416 , - 0.0800 , - 0.348 , 0.988 , 0.776 , 0.680 , 0.880 , - 0.816 , - 0.424 , - 0.932 , 0 .272 , - 0,556 , - 0,568 , - 0,600 , - 0,716 , - 0,796 , - 0,880 , - 0,972 , - 0,916 , 0,816 , 0,892 , 0,956 , 0,980 , 0,988 , 0,992 , 0,00400 ]) . изменить форму ( - 1 , 1 ) y = np . множество ([   - 0,917 , - 0,833 , - 0,801 , - 0,665 , - 0,605 , - 0,545 , - 0,509 , - 0,433 , - 0,397 , - 0,281 , - 0,205 , - 0,169 , - 0,0531 , - 0,06 51 , 0,0349 , 0,0829 , 0,0589 , 0,175 , 0.179 , 0.191 , 0.259 , 0.287 , 0.359 , 0.395 , 0.483 , 0.539 , 0.543 , 0.603 , 0.667 , 0.679 , 0.751 , 0.803 , - 0.265 , - 0 .341 , 0,111 , - 0,113 , 0,547 , 0,791 , 0,551 , 0,347 , 0,975 , 0,943 , - 0,249 , - 0,769 , - 0,625 , - 0,861 , - 0,749 , - 0,945 , - 0,493 , 0,163 , - 0,469 , 0,0669 , 0,891 , 0,623 , - 0,609 , - 0,677 , - 0,721 , - 0,745 , - 0,885 , - 0,897 , - 0,969 , - 0,949 , 0,707 , 0,783 , 0,859 , 0,979 , 0,811 , 0,891 , - 0,137 ]) . изменить форму ( - 1 , 1 ) регрессор . подходит ( X ,  y ) импортируйте  matplotlib.pyplot  как  plt  plt . стиль . используйте ( «seaborn-darkgrid» )  fig ,  ax  =  plt . подграфики ( 1 ,  1 )  топор . set_box_aspect ( 1 ) плт . разброс ( X ,  y ) линия  =  НП . linspace ( - 1 ,  1 ,  число = 100 ) . изменить форму ( -1 , 1 ) plt . сюжет ( линия , регрессор . предсказать ( линия ), c ​​= «перу» ) plt . показывать ()     
Диаграмма рассеяния, показывающая диагональную линию, идущую из нижнего левого угла в правый верхний угол рисунка. Линия тренда плотно прилегает к диагонали, не отбрасываясь выбросами, разбросанными в других местах фигуры.
Результат запуска RANSACреализации. Оранжевая линия показывает параметры метода наименьших квадратов, найденные с помощью итеративного подхода, который успешно игнорирует точки-выбросы.

Параметры

Пороговое значение для определения того, когда точка данных соответствует модели ( t ), и количество вкладок (точек данных, подогнанных к модели в пределах t ), необходимых для подтверждения того, что модель хорошо соответствует данным ( d ), определяются на основе конкретных требований. приложения и набора данных и, возможно, на основе экспериментальной оценки. Однако количество итераций ( k ) можно грубо определить как функцию желаемой вероятности успеха ( p ), как показано ниже.

Пусть p — желаемая вероятность того, что алгоритм RANSAC предоставит хотя бы один полезный результат после запуска. В крайнем случае (для упрощения вывода) RANSAC возвращает успешный результат, если на какой-то итерации он выбирает только входящие значения из набора входных данных, когда он выбирает n точек из набора данных, из которых оцениваются параметры модели. (Другими словами, все выбранные n точек данных являются внутренними элементами модели, оцененной по этим точкам). Пусть будет вероятность выбора входного значения каждый раз, когда выбирается одна точка данных, то есть примерно

= количество вставок в данных / количество точек в данных

Распространенным случаем является то, что он заранее неизвестен из-за неизвестного количества вставок в данных перед запуском алгоритма RANSAC, но можно дать некоторое приблизительное значение. При заданном грубом значении и грубом предположении, что n точек, необходимых для оценки модели, выбираются независимо (это грубое предположение, поскольку каждый выбор точки данных уменьшает количество кандидатов на точки данных, которые нужно выбрать при следующем выборе в реальности) , вероятность того, что все n точек являются выбросами, и является вероятностью того, что хотя бы одна из n точек является выбросом, случай, который подразумевает, что плохая модель будет оценена по этому набору точек. Эта вероятность в степени k (количество итераций при запуске алгоритма) представляет собой вероятность того, что алгоритм никогда не выберет набор из n точек, все из которых являются входными, и это то же самое, что (вероятность того, что алгоритм не приведет к результату). в успешной модельной оценке) в крайнем случае. Следовательно,

что после логарифмирования обеих частей приводит к

Этот результат предполагает, что n точек данных выбираются независимо, то есть точка, которая была выбрана один раз, заменяется и может быть выбрана снова в той же итерации. Зачастую это неразумный подход, и полученное значение k следует принимать в качестве верхнего предела в случае, если точки выбираются без замены. Например, в случае поиска линии, которая соответствует набору данных, показанному на рисунке выше, алгоритм RANSAC обычно выбирает две точки на каждой итерации и вычисляет maybe_modelкак линию между точками, и тогда критически важно, чтобы эти две точки были различны. .

Чтобы получить дополнительную уверенность, к k можно добавить стандартное отклонение или его кратные значения . Стандартное отклонение k определяется как

Преимущества и недостатки

Преимуществом RANSAC является его способность выполнять робастную оценку [3] параметров модели, т. е. он может оценивать параметры с высокой степенью точности, даже когда в наборе данных присутствует значительное количество выбросов . Недостатком RANSAC является отсутствие верхней границы времени, необходимого для вычисления этих параметров (кроме исчерпания ресурсов). Когда количество вычисляемых итераций ограничено, полученное решение может быть неоптимальным и даже не таким, которое хорошо соответствует данным. Таким образом, RANSAC предлагает компромисс; за счет вычисления большего количества итераций вероятность создания разумной модели увеличивается. Более того, RANSAC не всегда может найти оптимальный набор даже для умеренно загрязненных наборов и обычно плохо работает, когда количество вкладок меньше 50%. Оптимальный RANSAC [4] был предложен для решения обеих этих проблем и способен находить оптимальный набор для сильно загрязненных наборов, даже для входного соотношения менее 5%. Еще одним недостатком RANSAC является то, что он требует установки пороговых значений для конкретной проблемы.

RANSAC может оценить только одну модель для определенного набора данных. Что касается любого подхода с одной моделью, когда существуют два (или более) экземпляра модели, RANSAC может не найти ни один из них. Преобразование Хафа — это один из альтернативных методов надежной оценки, который может быть полезен, когда присутствует более одного экземпляра модели. Другой подход к подбору нескольких моделей известен как PEARL [5] , который сочетает в себе выборку модели из точек данных, как в RANSAC, с итеративной переоценкой вложенных значений, а подбор нескольких моделей формулируется как задача оптимизации с глобальной энергетической функцией, описывающей качество общего решения.

Приложения

Алгоритм RANSAC часто используется в компьютерном зрении , например, для одновременного решения проблемы соответствия и оценки фундаментальной матрицы , связанной с парой стереокамер; см. также: Структура из движения , преобразование масштабно-инвариантных признаков , сшивание изображений , жесткая сегментация движения .

Развитие и улучшения

С 1981 года RANSAC стал фундаментальным инструментом в области компьютерного зрения и обработки изображений. В 2006 году, к 25-летию алгоритма, на Международной конференции по компьютерному зрению и распознаванию образов (CVPR) был организован семинар, на котором были подведены итоги последних достижений и изменений в исходном алгоритме, в основном предназначенных для повышения скорости алгоритма. , надежность и точность предполагаемого решения, а также уменьшить зависимость от определяемых пользователем констант.

RANSAC может быть чувствителен к выбору правильного порога шума, который определяет, какие точки данных соответствуют модели, созданной с определенным набором параметров. Если такой порог слишком велик, то все гипотезы имеют тенденцию оцениваться одинаково (хорошо). С другой стороны, когда шумовой порог слишком мал, оцениваемые параметры имеют тенденцию быть нестабильными (т.е. при простом добавлении или удалении данных из набора вкраплений оценка параметров может колебаться). Чтобы частично компенсировать этот нежелательный эффект, Torr et al. предложил две модификации RANSAC, названные MSAC (M-оценка SAmple и консенсус) и MLESAC (SAmple и консенсус оценки максимального правдоподобия). [6] Основная идея состоит в том, чтобы оценить качество консенсусного набора (т.е. данных, которые соответствуют модели и определенному набору параметров), вычислив его правдоподобие (тогда как в исходной формулировке Фишлера и Боллеса ранг представлял собой мощность таких набор). Расширение MLESAC, которое учитывает априорные вероятности, связанные с входным набором данных, предложено Тордоффом. [7] Полученный алгоритм получил название Guided-MLESAC. Аналогичным образом Чам предложил проводить процедуру выборки в том случае, если известна некоторая априорная информация о входных данных, т. е. может ли исходное значение быть выбросом или выбросом. Предлагаемый подход называется PROSAC, PROgressive SAmple Consensus. [8]

Чам и др. также предложил рандомизированную версию RANSAC под названием R-RANSAC [9] для уменьшения вычислительной нагрузки и определения хорошего консенсусного набора. Основная идея состоит в том, чтобы первоначально оценить качество модели, созданной в данный момент, используя только сокращенный набор точек вместо всего набора данных. Разумная стратегия с высокой степенью уверенности подскажет, когда необходимо оценить соответствие всего набора данных или когда от модели можно легко отказаться. Разумно предположить, что влияние этого подхода более актуально в тех случаях, когда процент ошибочных ответов велик. Тип стратегии, предложенный Chum et al. называется схемой упреждения. Нистер предложил парадигму под названием Preemptive RANSAC [10] , которая позволяет в реальном времени надежно оценивать структуру сцены и движение камеры. Основная идея подхода состоит в генерации фиксированного количества гипотез, чтобы сравнение происходило по качеству сгенерированной гипотезы, а не по какому-то абсолютному показателю качества.

Другие исследователи пытались справиться со сложными ситуациями, когда масштаб шума неизвестен и/или присутствует несколько экземпляров модели. Первая проблема была решена в работе Ванга и Сутера. [11] Толдо и др. представлять каждую датум с помощью характеристической функции набора случайных моделей, соответствующих этой точке. Затем несколько моделей раскрываются как кластеры, которые группируют точки, поддерживающие одну и ту же модель. Алгоритм кластеризации, называемый J-linkage, не требует предварительного указания количества моделей и ручной настройки параметров. [12]

RANSAC также был адаптирован для приложений рекурсивной оценки состояния, где входные измерения искажаются выбросами, а подходы с фильтром Калмана , которые полагаются на гауссово распределение ошибки измерения, обречены на провал. Такой подход получил название КАЛЬМАНСАК. [13]

Связанные методы

Смотрите также

Примечания

  1. ^ Подбор данных и неопределенность, Т. Струц, Springer Vieweg (2-е издание, 2016 г.)
  2. ^ Канцлер, Х. «Консенсус случайной выборки (ransac)». Институт восприятия, действия и поведения, отдел информатики, Эдинбургский университет (1981). http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.106.3035&rep=rep1&type=pdf
  3. ^ Надежная статистика, Питер. Дж. Хубер, Wiley, 1981 (переиздано в мягкой обложке, 2004 г.), стр. 1.
  4. ^ Андерс Хаст, Йохан Нисьё, Андреа Маркетти (2013). «Оптимальный RANSAC - к повторяемому алгоритму поиска оптимального набора». Журнал WSCG 21 (1): 21–30.
  5. ^ Хоссам Исак, Юрий Бойков (2012). «Энергетическая геометрическая многомодельная подгонка». Международный журнал компьютерного зрения 97 (2: 1): 23–147. дои : 10.1007/s11263-011-0474-7.
  6. ^ PHS Торр и А. Зиссерман, MLESAC: новый надежный оценщик с применением для оценки геометрии изображения [ мертвая ссылка ] , Журнал компьютерного зрения и понимания изображений 78 (2000), вып. 1, 138–156.
  7. ^ Б. Дж. Тордофф и Д. В. Мюррей, Guided-MLESAC: Более быстрая оценка преобразования изображения с использованием априорных сопоставлений, Транзакции IEEE по анализу шаблонов и машинному интеллекту 27 (2005), вып. 10, 1523–1535 гг.
  8. ^ Сопоставление с PROSAC - консенсус прогрессивной выборки, Материалы конференции по компьютерному зрению и распознаванию образов (Сан-Диего), том. 1 июня 2005 г., стр. 220–226.
  9. ^ О. Чам и Дж. Мэйтас, Рандомизированный RANSAC с тестом Td,d, 13-я Британская конференция по машинному зрению, сентябрь 2002 г. http://www.bmva.org/bmvc/2002/papers/50/
  10. ^ Д. Нистер, Упреждающий RANSAC для оценки живой структуры и движения, Международная конференция IEEE по компьютерному зрению (Ницца, Франция), октябрь 2003 г., стр. 199–206.
  11. ^ Х. Ван и Д. Сутер, Надежная параметрическая оценка модели адаптивного масштаба для компьютерного зрения., Транзакции IEEE по анализу шаблонов и машинному интеллекту 26 (2004), вып. 11, 1459–1474 гг.
  12. ^ Р. Тольдо и А. Фузиелло, Надежная оценка множественных структур с помощью J-связи, Европейская конференция по компьютерному зрению (Марсель, Франция), октябрь 2008 г., стр. 537–547.
  13. ^ А. Ведальди, Х. Джин, П. Фаваро и С. Соатто, КАЛМАНСАК: Надежная фильтрация на основе консенсуса, Труды Международной конференции по компьютерному зрению (ICCV), том. 1, 2005, стр. 633–640.
  14. ^ Брахмачари, Авик С.; Саркар, Судип (март 2013 г.). «Монте-Карло хмель-диффузии для оценки эпиполярной геометрии между изображениями с очень широкой базовой линией». Транзакции IEEE по анализу шаблонов и машинному интеллекту . 35 (3): 755–762. дои : 10.1109/TPAMI.2012.227. PMID  26353140. S2CID  2524656.

Рекомендации