Преобразование плотности поля потока

8

Я пытаюсь реализовать навигацию по потоку, как описано в http://grail.cs.washington.edu/projects/crowd-flows/, но я не могу понять, как должна обрабатываться функция плотности на рисунке 4 статьи радиус единицы.

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

Это часть вопроса:

введите описание изображения здесь

Кажется, что их алгоритм использует только 4 ячейки, указывающие на нижний левый угол блока, так что это какое-то ядро, которое нужно применять несколько раз?

Спасибо.

sharvey
источник
Не удалось добавить более релевантные теги из-за уровня репутации.
Шарви

Ответы:

3

Нет, это не «ядро, которое нужно применять несколько раз». Вы просто применяете формулы, как написано, один раз.

Это довольно странное правило, и оно не очень четко описано. Позвольте мне немного уточнить это:

  • Сначала найдите четыре ячейки, общий угол которых находится ближе всего к блоку. Единица внесет ненулевое количество плотности только в эти ячейки. Назовите эти ячейки A, B, C и D как на рисунке 4 (b).

  • Пусть Δx и Δy - горизонтальное и вертикальное расстояние единицы от центра ячейки A, измеренное в единицах ширины / высоты одной ячейки.

  • Пусть ρ A = min (1 − Δx, 1 − Δy) λ , ρ B = min (Δx, 1 − Δy) λ , ρ C = min (Δx, Δy) λ и ρ D = min (1 − Δx, Δy ) λ , как описано в статье.

  • Пусть единица вносит ρ A плотность в ячейку A, ρ B плотность в ячейку B, ρ C плотность в ячейку C и ρ D плотность в ячейку D.

Как я уже сказал, правило довольно странное, и у меня нет для него очевидной геометрической интерпретации. Однако он удовлетворяет ожидаемым свойствам, которые:

  • Когда единица находится точно в середине любой ячейки X, то (независимо от того, какой из A, B, C или D мы выбираем X), она вносит 1 λ = 1 единицу плотности в ячейку X и 0 единиц плотности в любая другая клетка.

  • Когда единица находится точно в углу четырех ячеек, она вносит (1/2) λ единиц плотности в каждую из четырех ячеек (и ни в какую другую ячейку, по определению).

Однако обратите внимание, что при использовании этого правила общая величина плотности, вносимая единицей во все ячейки, не является постоянной, даже если λ = 1. В частности, когда единица находится точно в средней точке границы между двумя ячейками, он вносит (1/2) λ единиц плотности в эти две ячейки, и ничего в любую другую ячейку. Таким образом, называние результирующего значения «плотностью» кажется немного вводящим в заблуждение.


Изменить: Другой способ написания формул для ρ A , ρ B , ρ C и ρ D , которые могут сделать симметрию определений более очевидной, заключается в определении d X = max (| x - x X |, | y - y X |) как расстояние от шахматной доски до единицы (x, y) от центра ячейки X в точке (x X , y X ), измеренное по ширине / высоте ячейки. Тогда для любой клетки X,

  • ρ X = 0, если d X ≥ 1, и
  • ρ X = (1 - d X ) λ в противном случае.
Илмари Каронен
источник
Я не понимаю, почему нижние левые ячейки рядом с той, в которой находится агент, должны получать значение плотности, а верхние правые - нет.
Шарви
@sharvey: потому что на картинке агент находится ниже и слева от центра ячейки, в которой он находится.
Ильмари Каронен,
Ах, это имеет смысл. Но чтобы было ясно, радиус единицы не имеет ничего общего с расчетом плотности, верно?
Шарви
Да, в формулах, которые вы указали, нет никакого «радиуса», который мог бы войти в эти вычисления.
Ильмари Каронен
Я не близок к тому, чтобы это реализовать, но спасибо за ответ. Думаю, я прочитаю газету снова.
Шарви