Jak mogę porównać dwa zdjęcia z aparatu i stwierdzić, czy istnieją wystarczające różnice, aby wykryć ruch?

18

Chcę używać telefonu jako systemu telewizji przemysłowej do sterowania pokojem w moim domu i wyświetlania ostrzeżenia, gdy coś się porusza.

Na razie udało mi się zrobić zdjęcie co minutę i przesłać je za pomocą skryptu PHP na mój serwer. Teraz chciałbym porównać bieżące zdjęcie i zdjęcie 1 minutę temu i sprawdzić, czy ktoś wszedł do pokoju. Zasadniczo musiałbym porównać różnice pikseli na obrazie (ale również biorąc pod uwagę, że chmura może po prostu przywitać się i zmienić jasność w ciągu jednej minuty)

Czy ktoś ma jakiś pomysł, jak to osiągnąć, lub jakiś dokument do przeczytania?

Waza_Be
źródło
4
Zrobiłem coś takiego lata temu. Moją techniką było podzielenie obrazu na sekcje, powiedzmy siatkę 20 * 20, znalezienie wartości średniego koloru w każdej komórce (poprzez pobranie średniego koloru w każdym pikselu w tej komórce) i przechowywanie go. Zrób to samo dla następnego obrazu, a jeśli jest wystarczająca (pozostawię ci tę tolerancję) różnicę w średnich kolorach, możesz założyć ruch. Nie rób tolerancji tak drobnej, że zauważy subtelne zmiany w świetle lub przechodzące cienie itp.
1
Oto interesujący post na ten temat, który może okazać się przydatny codeproject.com/KB/audio-video/Motion_Detection.aspx
CHDK dzieli również obraz na siatkę. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Aby wykryć ruch i nie wykryć zmian oświetlenia, powiedziałbym, że zmiana wielu komórek siatki nie jest ruchem, podczas gdy zmiana tylko kilku komórek siatki jest.
endolith,

Odpowiedzi:

10

Wydaje mi się, że szukasz techniki odejmowania tła. Przy hałaśliwym obrazie i zmieniających się warunkach oświetleniowych może to być niepraktyczne. Obecną najnowszą techniką w tym zakresie jest reprezentacja macierzy niskiej rangi, ale wymaga ona nie dwóch, ale wielu (~ tuzinów) obrazów. Oto niektóre matematyki ciężkie: każdy obraz traktowany jako wektor pikseli, wektory połączone w matrycę, a ta matryca jest rozkładana na matrycę i resztę niskiego rzędu. Niskopoziomowe kolumny macierzy to tła, a resztki poruszają się. Istnieją pewne implementacje typu open source, ale tylko dla samego faktoryzacji, a nie kompletnego potoku obrazu IIRC

Oto artykuł i kod do faktoryzacji macierzy http://www.ece.rice.edu/~aew2/sparcs.html

Oto przegląd z blogu CS i link do innego kodu:

https://sites.google.com/site/igorcarron2/matrixfactorizations

http://nuit-blanche.blogspot.com/search/label/MF

Przegląd niektórych innych technik: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf

mirror2image
źródło
1
czy celowo zrobiłeś to CW?
Lorem Ipsum
1
Co oznacza „CW”?
mirror2image 17.11.11
Ahh, pytanie wiki. Pomyślałem, że dobrym pomysłem byłoby wprowadzenie tej całkiem nowej technologii wykonującej rzeczy praktyczne. Jeśli nie zgadzasz się, możesz go usunąć. Również inni ppls mogą mieć więcej doświadczenia z tą technologią - zacząłem się nią interesować.
mirror2image 17.11.11
CW jest pytaniem społeczności Wiki. Oznacza to, że nie zyskasz reputacji (w tym przypadku 4x10 = 40) za głosami pozytywnymi na twojej odpowiedzi. Niektóre osoby celowo udzielają takich odpowiedzi, ale najczęściej jest to przypadkowe. Cofnęłam to dla ciebie, żebyś dostał swojego przedstawiciela. Teraz jest 181 z 126 :)
Lorem Ipsum,
5

Pamiętaj: są cienie (nie tylko jasność).

Nie podoba mi się pomysł Jamesa Webstera, ponieważ polega on głównie na zmniejszeniu rozdzielczości w każdym wymiarze i porównaniu pomniejszonych obrazów (również nie lubię progów - są one arbitralne, musisz je przetestować i dostosować dopóki nie uzyskasz dobrej wartości, a następnego dnia wartości te mogą być nieaktualne z powodu różnych warunków pogodowych lub innych skutków środowiskowych)

Ale szczerze mówiąc, nie mam też naprawdę dobrego rozwiązania. Moim pierwszym pomysłem było różnicowanie każdego obrazu do obrazu referencyjnego pustego pokoju i uruchomienie wykrywania krawędzi na obrazie różnicowym. Ale to także wykryłoby cienie. Ale myślę, że nie możesz odróżnić cienia od innych przedmiotów ... przynajmniej nie wiem jak. Ale może możesz porównać wynik po wykryciu krawędzi między 2 ramkami, ponieważ cienie przeważnie poruszają się powoli (nadal będą problemy, gdy samochody będą się poruszać lub gdy chmura się porusza)

Philipp Wendt
źródło
Chcesz wykryć coś, co nagle się zmienia. Cienie nie zmienią się zbytnio z minuty na minutę. Jednak ogólna jasność słońca.
endolith,
2
Cienie poruszają się szybko, jeśli np. Przejeżdża przez nie samochód i albo upuszcza własny cień przez okno, albo upuszcza cienie niektórych innych obiektów za pomocą reflektora.
Philipp Wendt,
4

Technika „rozkładania macierzy” NIE pomoże ci wykonać pracy! Artykuł, do którego odnosi się @ mirror2image, dotyczy odejmowania tła, ale NIE jest oparty na „rozkładzie macierzy”.

Korzystanie z wideo w ruchu do wykrywania ruchomych obiektów (ludzi lub pojazdów) jest aktywnym obszarem badań.

Zgodnie z podstawową zasadą system ocenia typowe tło statyczne, próbkując wiele zdjęć i biorąc różnicę energii między przychodzącym obrazem w tle. Jeśli energia jest znacząca, piksel jest klasyfikowany jako pierwszy plan. Taki zestaw pierwszego planu informuje, czy w systemie znajduje się wpis obiektu.

Najlepszym odniesieniem do twojego dokumentu badawczego (a także stosunkowo prostszym, jeśli naprawdę chcesz go wdrożyć) byłoby - System W4 znajdź go tutaj i zobacz artykuł Picardi tutaj jako bardziej szczegółowe badanie innych technik w systemie.

Istnieje wiele wyzwań, które dotyczą tego problemu:

  1. Obecność hałasu stwarza problemy o dużej niejednoznaczności. Podejście polega na zastosowaniu wydajnego filtrowania czasowego i rozważeniu wariancji hałasu, aby był odporny na próg.

  2. Obecność cienia tworzy dwuznaczność, że ani nie jest na pierwszym planie, ani. Są papiery, które modelują rozróżnienie koloru i intensywności, aby rozróżnić cień od rzeczywistego pierwszego planu.

  3. Tło może być skomplikowane, jak falujące drzewa lub morze itp.

  4. Tło może mieć powolne lub nagłe zmiany oświetlenia, a wcześniej „wyuczone” tło jest następnie dostosowywane do nowego.

Jeden z najczęściej wskazywanych punktów orientacyjnych nazywa się Algorytm kwiatu ściany pokazuje najlepszy sposób łączenia różnych takich scenariuszy w celu uzyskania niezawodnego wykrywania obiektów ruchomych.

Dipan Mehta
źródło
2

Nie znam dokładnego rozwiązania, ale powinieneś zrobić jakiś hasz obrazu; mniejszy zestaw danych wyodrębniony z obrazu, który jest porównywalny lepiej niż cały obraz.

Myślę, że histogram kolorów to dobry wybór .

Jeśli podzielisz obraz na obszary i utworzysz osobne histogramy dla tych obszarów, możesz określić pozycję / ścieżkę intruza.


źródło
Dziękuję bardzo, poczekam na inne rozwiązania, jeśli nie będę w stanie znaleźć lepszego, zaakceptuję twoje. Do twojej wiadomości, nie chcę określać ścieżki intruza, ponieważ 1 minuta to za mało, ale samo wysłanie ostrzeżenia jest świetne. Dzięki.
1
Uważaj, niektórzy intruzi mogą skończyć w 1 minutę! Dokonuj tak często kontroli, jak to możliwe. Jeśli twój program jest zbyt wolny, zmniejsz rozdzielczość obrazu.
1
Tak, w rzeczywistości planuję robić zdjęcia co 10 sekund i przesyłać je tylko wtedy, gdy wykryję intruza, lub co minutę, gdy nie ma problemu.
1

Dwukrotne wzięcie różnicy, tj. Różnica różnic, może pomóc ... więc jeśli podwójna pochodna pikseli jest większa niż próg w niektórych regionach, możesz to nazwać, gdy ktoś wszedł do pokoju. Zmiana jasności da w przybliżeniu stały gradient na całym obrazie, ale przyjęcie Hesji lub pochodnej podwójnej da dobre wskazanie ruchu lub poważnych zmian w pomieszczeniu.

KV Vijay Girish
źródło