Muszę wykryć szybkość przesuwania kamery (poziomo / pionowo), aby ostrzec operatora, aby zwolnił.
Cały obraz porusza się jak blok, nie potrzebuję rzeczywistego kierunku (chociaż H lub V byłyby bonusem) i potrzebuję tylko przybliżonej wielkości - tj. wyzwalane, jeśli między klatkami przesuwa się więcej niż „N” pikseli.
Obrazy są duże i ogólnie jednolite sceny o niskim kontraście, nie mam żadnych oczywistych wyróżnień do śledzenia. Muszę to zrobić w czasie rzeczywistym (60 klatek na sekundę) i bez użycia całego procesora.
Rozwiązaniem Niave jest wybranie wskaźnika ROI na środku, znalezienie krawędzi, obliczenie podobieństwa między parami ramek, przesunięcie jednej z klatek w lewo / prawo / w górę / w dół o piksel, powtórzenie - znalezienie minimów.
Zastanawiałem się, czy istnieje mądrzejsze rozwiązanie?
źródło
To może być powolne, straszne rozwiązanie, ale możesz wykonać korelację krzyżową kolejnych ramek opartą na FFT, a następnie znaleźć wartość szczytową w celu zidentyfikowania przesunięcia między ramkami. Być może zrób to tylko na małym podzbiorze obrazu, aby zaoszczędzić cykle procesora.
Nie działałoby to z rotacją lub drastycznymi zmianami sceny z jednej klatki do drugiej, i prawdopodobnie są lepsze metody. Jest to rodzaj rozwiązania „Mam młotek, więc wszystko wygląda jak gwóźdź”. Wydaje mi się, że jest to tak samo jak naiwne rozwiązanie, z tym wyjątkiem, że nie ma potrzeby wykrywania krawędzi, a FFT sprawia, że jest to znacznie szybsze niż jawne przesuwanie jednego piksela na raz.
To pytanie jest podobne i nikt nie sugeruje niczego poza korelacją krzyżową, więc może nie jest tak źle: Używanie MATLAB do obliczania przesunięcia między kolejnymi obrazami
źródło
Jednym ze sposobów oszacowania prędkości i kierunku byłoby dokonanie „lokalnego” oszacowania przepływu np. Czterech okien w środku obrazu. Metoda różnicowa Lucas – Kanade zakłada, że przemieszczenie jest w przybliżeniu stałe i dlatego możliwe jest rozwiązanie jako równanie.
Więc mój przewodnik krok po kroku będzie:
Określa kierunek i prędkość, jednak można użyć ważonego okna, aby uczynić je bardziej solidnym. Spójrz na metodę Lucas-Kanade dla jej rozszerzeń.
źródło
Myślę, że korelacja krzyżowa jest dobrym podejściem do znalezienia przesunięcia, ale jeśli chcesz to zrobić naprawdę szybko, możesz spróbować ograniczyć go tylko do jednej pionowej i jednej poziomej linii skanowania (tj. Przez środek obrazu). Obliczenie korelacji krzyżowej między liniami skanowania w obu ramkach powinno dać przybliżenie przesunięcia poziomego i pionowego.
źródło