Отследить Изолину Дорогой 2D Функции

10

У меня есть проблема, похожая по формулировке на этот пост, с несколькими заметными отличиями:

Какие простые методы существуют для адаптивной выборки 2D-функции?

Как в этом посте:

  • У меня есть и оценка этой функции несколько дороже, чтобы вычислитьf(x,y)

В отличие от этого поста:

  • Меня интересует не точное значение функции везде, а только поиск единственного изоконтура функции.

  • Я могу сделать значительные утверждения об автокорреляции функции и, следовательно, о шкале гладкости.

Есть ли разумный способ пошагово / выборки этой функции и найти этот контур?

Больше информации

Функция - это вычисление характеристик Харалика по пикселям, окружающим точку, и мягкая классификация с помощью какого-либо классификатора / регрессора. Результатом этого является число с плавающей запятой, которое указывает, к какой текстуре / материалу принадлежит точка. Масштабирование этого числа может быть оценено вероятностями класса (SoftSVM или статистическими методами и т. Д.) Или чем-то действительно простым, например, выводом линейной / логистической регрессии. Классификация / регрессия является точной и дешевой по сравнению со временем, затрачиваемым на извлечение признаков из изображения.N

Nf(x,y,N)NN

Вещи, которые я пробовал:

  • N

  • Тупой шаг - сделайте «шаг» по одному пикселю в каждом направлении и выберите направление движения в зависимости от близости к значению изо-линии. Все еще довольно медленный, и он будет игнорировать раздвоение изолинии. Кроме того, в областях с плоским градиентом он будет «блуждать» или удваиваться.

N

meawoppl
источник
У меня точно такая же проблема, за исключением того, что это функция правдоподобия, которую я хочу обвести контуром, и она дорогая, потому что в каждой точке мне нужно выполнять минимизацию. Достигли ли вы какого-либо прогресса и / или можете ли вы указать, как в конечном итоге вы это сделали?
Adavid
Я только что проверил решение, на котором я сходился. (см. ниже)
meawoppl

Ответы:

4

В компьютерной графике есть статья под названием « Достаточно хорошая выборка и построение сетки поверхностей» , в которой вы предоставляете оракула, который определяет все пересечения изолинии с данным отрезком линии. При этом он выбирает все контуры, предполагая, что вы можете указать локальный масштаб объекта (что-то вроде максимальной локальной кривизны) и начальный набор отрезков, который пересекает все контуры. Это не самая простая вещь для реализации, поскольку она основана на вычислении триангуляции Делоне, но реализована в 3D в CGAL . Это существенно проще в 2D, поскольку существует хорошее программное обеспечение для триангуляции, такое как Triangle . В некотором смысле, это довольно близко к лучшему, что вы можете сделать.

Виктор Лю
источник
Мне очень нравится эта формулировка, так как она логично распространяется на 3D довольно чисто. Я должен сформулировать это в Python, так что у меня уже есть доступ к обёртке Делона в qhull, так что это не большая проблема. Дайте мне посмотреть, правильно ли я изложил это резюме: - Сделайте несколько выборок для посева. - Триангуляционные образцы. - Для всех ребер, которые охватывают изолинию выше некоторой длины: вычислить пересечения изолинии с ребром - все вычислены для выборок и повторить с шага триангуляции?
Meawoppl
@meawoppl: Я лично не реализовывал и не использовал этот алгоритм (пока!), но это звучит правильно.
Виктор Лю
Я собираюсь стереть это сегодня и опубликовать некоторые результаты!
Meawoppl
Извините за задержку. Этот метод работает очень хорошо для моего набора данных. По сути, я запускаю регулярную сетку для выборки, чтобы начать, а затем триангулировать, подразделять края, которые пересекают изо-контур, повтор. Довольно сложно выразить требование «наилучшей характеристики», и есть смысл случайной начальной выборки по сравнению с обычной, поскольку диагональная изолиния занимает немного больше времени, чем та, которая следует за арендаторами выборки. В итоге я просто позволил этому пройти максимум 5 проходов, и это сработало как очень простой критерий остановки. Wooo> 1K
meawoppl
1

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

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

Если я не отговорил вас об этом, вы можете прочитать больше о EGRA здесь (ссылка в формате PDF) и здесь , и есть существующая реализация в проекте DAKOTA Сандии - насколько мне известно, единственная доступная реализация EGRA с открытым исходным кодом.

Barron
источник