2013-06-20 3 views
7

opencv имеет реализацию алгоритма максимального потока (класс GCGRAPH в файле gcgraph.hpp). Это available here.Какой алгоритм opencv GCGRAPH (max flow) основан на?

Кто-нибудь знает, какой конкретный алгоритм максимального потока реализован этим классом?

+0

@taocp У меня возникли проблемы с чтением алгоритма из реализации, поскольку реализация более ориентирована на производительность, чем ориентированная на читаемость. – Shai

+0

@templatetypedef - спасибо за ссылку – Shai

+1

Я пытаюсь понять это сейчас, но это наименее читаемый код, который я видел через некоторое время. Комментируйте свой код, ребята! – templatetypedef

ответ

8

Я не уверен на 100% об этом, но считаю, что алгоритм основан на this research paper describing max-flow algorithms for computer vision. В частности, в разделе 3 описан новый алгоритм вычисления максимальных потоков.

Я не выстроены каждую деталь алгоритма газеты с реализацией алгоритма, но многие детали, кажется, соответствуют:

  • Описанный алгоритм работы с использованием двунаправленного поиска с обеих s- и т , реализация которого также выполняется: например, есть комментарий, читающий // grow S & T search trees, find an edge connecting them.
  • В описанном алгоритме отслеживается набор осирожденных узлов, которые, как представляется, отслеживает переменную std::vector<Vtx*> orphans в реализации.
  • Алгоритм, описанный в работах, создает множество деревьев и использует их повторно; реализация алгоритма отслеживает дерево, связанное с каждым узлом.

Надеюсь, это поможет!

+1

Это отличная помощь! Спасибо. – Shai