Conversão de densidade de campo de fluxo

8

Estou tentando implementar a navegação de campo de fluxo, conforme descrito em http://grail.cs.washington.edu/projects/crowd-flows/, mas não consigo entender como a Função de Densidade na Figura 4 do artigo deve lidar raio unitário.

Alguém já implementou isso e pode fornecer mais informações?

Esta é a parte em questão:

insira a descrição da imagem aqui

O algoritmo deles parece estar usando apenas 4 células, apontando para o canto inferior esquerdo da unidade, então isso é algum tipo de kernel que precisa ser aplicado várias vezes?

Obrigado.

sharvey
fonte
Não foi possível adicionar tags mais relevantes devido ao nível de reputação.
31813 sharvey

Respostas:

3

Não, não é um "kernel que precisa ser aplicado várias vezes". Você acabou de aplicar as fórmulas como escritas, uma vez.

É uma regra meio estranha, porém, e não muito claramente descrita. Deixe-me tentar esclarecer um pouco:

  • Primeiro, encontre as quatro células cujo canto compartilhado é o mais próximo da unidade. A unidade contribuirá com uma quantidade diferente de zero de densidade apenas para essas células. Chame essas células de A, B, C e D como na figura 4 (b).

  • Seja Δx e Δy a distância horizontal e vertical da unidade do centro da célula A, medida em unidades de uma largura / altura da célula.

  • Seja ρ A = min (1 − Δx, 1 − Δy) λ , ρ B = min (Δx, 1 − Δy) λ , ρ C = min (Δx, Δy) λ e ρ D = min (1 − Δx, Δy ) λ , conforme descrito no artigo.

  • Deixe a unidade contribuir com densidade ρ A para a célula A, densidade ρ B para célula B, densidade ρ C para célula C e densidade ρ D para a célula D.

Como eu disse, a regra é meio estranha e não tenho uma interpretação geométrica óbvia para oferecer. Porém, satisfaz as propriedades esperadas que:

  • Quando a unidade está exatamente no meio de qualquer célula X, então (independentemente de qual de A, B, C ou D escolhemos X), ela contribui com 1 λ = 1 unidade de densidade para a célula X e 0 unidades de densidade para qualquer outra célula.

  • Quando a unidade está exatamente no canto de quatro células, contribui (1/2) λ unidades de densidade para cada uma das quatro células (e nada para qualquer outra célula, por definição).

No entanto, observe que, usando esta regra, a quantidade total de densidade contribuída por uma unidade para todas as células não é constante, nem mesmo se λ = 1. Em particular, quando a unidade está exatamente no ponto médio da borda entre duas células, contribui (1/2) λ unidades de densidade para essas duas células e nada para qualquer outra célula. Assim, chamar o valor resultante de "densidade" parece um pouco enganador.


Edit: Outra maneira de escrever as fórmulas para ρ A , ρ B , ρ C e ρ D , que podem tornar a simetria das definições mais aparente, é definir d X = max (| x - x X |, | y - y X |) como a distância do tabuleiro de xadrez da unidade em (x, y) do centro da célula X em (x X , y X ), medida em larguras / alturas da célula. Então, para qualquer célula X,

  • ρ X = 0 se d X ≥ 1 e
  • ρ X = (1 - d X ) λ caso contrário.
Ilmari Karonen
fonte
Não entendo o motivo pelo qual as células inferiores esquerdas adjacentes àquelas em que o agente está devem receber valor de densidade, enquanto as células superiores à direita não.
sharvey
@sharvey: Porque na imagem, o agente está abaixo e para a esquerda do centro da célula é, em.
Ilmari Karonen
Ah, isso faz sentido. Mas, para ficar claro, o raio da unidade não tem nada a ver com o cálculo da densidade, certo?
sharvey
Certo, não parece haver nenhum "raio" nas fórmulas citadas que possam entrar nesses cálculos.
Ilmari Karonen
Não estou mais perto de realmente implementá-lo, mas obrigado pela resposta. Acho que vou ler o jornal novamente.
sharvey