Preciso detectar a rapidez com que uma câmera está fazendo o movimento panorâmico (horizontal / vertical) para alertar o operador para diminuir a velocidade.
A imagem inteira está se movendo como um bloco, não preciso de uma direção real (embora H ou V seja um bônus) e só preciso de uma magnitude aproximada - ou seja. disparar se mais de 'N' pixels mudarem entre os quadros.
As imagens são grandes e geralmente uniformes, cenas de baixo contraste, não tenho destaques óbvios para rastrear. Eu preciso fazer isso em tempo real (60fps) e sem usar toda a CPU.
A solução Niave é escolher um RoI no centro, encontrar bordas, calcular semelhanças entre pares de quadros, mudar um dos quadros para a esquerda / direita / cima / baixo por um pixel, repetir - encontrar mínimos.
Gostaria de saber se havia uma solução mais inteligente?
fonte
Essa pode ser uma solução lenta e terrível, mas você pode fazer uma correlação cruzada baseada em FFT dos quadros subsequentes e, em seguida, encontrar o pico para identificar o deslocamento entre os quadros. Talvez faça isso apenas em um pequeno subconjunto da imagem para salvar os ciclos do processador.
Não funcionaria com rotação ou mudanças drásticas de cena de um quadro para o seguinte, e provavelmente existem métodos melhores. É como uma solução "Eu tenho um martelo, então tudo parece uma unha". Eu acho que isso é exatamente como a sua solução ingênua, exceto que não há necessidade de detecção de borda e a FFT torna muito mais rápido do que mudar explicitamente um pixel de cada vez.
Essa pergunta é semelhante e ninguém está sugerindo outra coisa senão correlação cruzada, então talvez não seja tão ruim: Usando o MATLAB para calcular o deslocamento entre imagens sucessivas
fonte
Uma maneira de estimar a velocidade e a direção seria fazer uma estimativa de fluxo "local" de, por exemplo, quatro janelas no centro da imagem. O método diferencial Lucas-Kanade assume que o deslocamento é aproximadamente constante e, portanto, é possível resolver como uma equação.
Portanto, meu guia passo a passo seria:
Isso determina a direção e a velocidade; no entanto, você pode usar uma janela ponderada para torná-la mais robusta. Veja o método Lucas-Kanade para suas extensões.
fonte
Eu acho que a correlação cruzada é uma boa abordagem para encontrar o deslocamento, mas se você quiser fazê-lo muito rápido, tente restringi-lo a apenas uma única linha de varredura vertical e uma única horizontal (ou seja, através do centro da imagem). O cálculo da correlação cruzada entre as linhas de varredura nos dois quadros deve fornecer uma aproximação do deslocamento horizontal e vertical.
fonte