Bagaimana saya bisa membandingkan dua gambar dari kamera dan mengetahui apakah ada cukup perbedaan untuk mendeteksi gerakan?

18

Saya ingin menggunakan telepon saya sebagai sistem CCTV untuk mengontrol ruangan di rumah saya, dan menampilkan peringatan ketika ada sesuatu yang bergerak.

Untuk saat ini, apa yang berhasil saya lakukan adalah mengambil gambar setiap menit dan mengunggahnya melalui skrip PHP ke server saya. Sekarang, saya ingin membandingkan gambar saat ini dan gambar 1 menit yang lalu dan mendeteksi jika seseorang memasuki ruangan. Jadi pada dasarnya, saya perlu membandingkan perbedaan piksel pada gambar (tetapi juga memperhitungkan bahwa cloud mungkin hanya menyapa dan mengubah kecerahan selama satu menit)

Adakah yang punya petunjuk tentang cara mencapainya atau membaca beberapa dokumen?

Waza_Be
sumber
4
Saya melakukan sesuatu seperti ini tahun lalu. Teknik saya adalah memecah gambar menjadi beberapa bagian, katakanlah kisi 20 * 20, temukan nilai untuk warna rata-rata di setiap sel (dengan mengambil warna rata-rata di setiap piksel dalam sel itu) dan menyimpannya. Lakukan hal yang sama untuk gambar berikutnya dan jika ada cukup (saya akan meninggalkan toleransi terserah Anda) perbedaan dalam warna rata-rata, Anda dapat menganggap gerakan. Jangan membuat toleransi begitu baik sehingga akan melihat perubahan halus dalam cahaya atau melewati bayangan dll.
1
Berikut ini adalah posting yang menarik tentang subjek yang mungkin Anda temukan codeproject.com/KB/audio-video/Motion_Detection.aspx yang
CHDK juga memecah gambar menjadi kotak. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Untuk mendeteksi gerakan dan tidak mendeteksi perubahan pencahayaan, saya akan mengatakan bahwa perubahan dalam banyak sel jaringan tidak bergerak, sedangkan perubahan hanya dalam beberapa sel kotak.
endolith

Jawaban:

10

Menurut saya apa yang Anda cari adalah teknik pengurangan latar belakang. Dengan gambar yang bising dan perubahan kondisi pencahayaan, bisa jadi tidak penting. Keadaan saat ini teknik seni untuk ini adalah representasi matriks peringkat rendah, tetapi tidak memerlukan dua tetapi banyak (~ lusin) gambar. Beberapa matematika tugas berat mengikuti: Setiap gambar dianggap sebagai vektor piksel, vektor digabungkan ke dalam matriks dan matriks ini didekomposisi menjadi matriks peringkat rendah dan sisa. Kolom matriks peringkat rendah adalah latar belakang dan sisanya adalah objek bergerak. Ada beberapa implementasi open-source, tetapi hanya untuk faktorisasi itu sendiri, tidak menyelesaikan pipa gambar IIRC

Berikut ini adalah kertas dan kode untuk faktorisasi matriks http://www.ece.rice.edu/~aew2/sparcs.html

Berikut ini ikhtisar dari blog CS dan tautan ke kode lain:

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

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

Survei beberapa teknik lain: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf

mirror2image
sumber
1
apakah Anda sengaja membuat CW ini?
Lorem Ipsum
1
Apa artinya "CW"?
mirror2image
Ahh, pertanyaan wiki. Saya pikir itu akan menjadi ide yang baik untuk memperkenalkan teknologi yang cukup baru ini dengan melakukan hal-hal praktis. Jangan ragu untuk menghapusnya jika Anda tidak setuju. Juga ppls lain mungkin memiliki lebih banyak pengalaman dengan teknologi ini - saya hanya mulai masuk ke dalamnya.
mirror2image
CW adalah pertanyaan komunitas-Wiki. Artinya, Anda tidak akan mendapatkan reputasi (dalam hal ini 4x10 = 40) untuk upvote pada jawaban Anda. Beberapa orang sengaja membuat jawaban mereka seperti ini, tetapi lebih sering daripada tidak, itu kebetulan. Saya telah mengembalikan ini untuk Anda, sehingga Anda mendapatkan perwakilan Anda. Sekarang 181 dari 126 :)
Lorem Ipsum
5

Ingat: Ada bayangan (bukan hanya kecerahan).

Saya tidak terlalu menyukai ide dari James Webster, karena pada dasarnya menurunkan resolusi di setiap dimensi dan membandingkan gambar yang diperkecil (juga saya tidak suka ambang - mereka harus berubah-ubah, Anda harus menguji dan mengubah mereka sampai Anda mendapatkan nilai yang baik dan pada hari berikutnya nilai-nilai ini dapat usang karena cuaca yang berbeda atau efek lingkungan lainnya)

Tapi jujur ​​saja, saya juga tidak punya solusi yang benar-benar bagus. Ide pertama saya adalah untuk meng-diff setiap gambar ke gambar referensi dari ruang kosong dan menjalankan deteksi tepi pada gambar diff. Tetapi ini juga akan mendeteksi bayangan. Tapi saya kira Anda tidak dapat membedakan antara bayangan dan objek lainnya ... setidaknya saya tidak tahu caranya. Tapi mungkin Anda bisa membandingkan hasilnya setelah deteksi Tepi antara 2 frame, karena bayangan sebagian besar bergerak lambat (masih akan ada masalah ketika mobil melintas atau ketika awan melaju)

Philipp Wendt
sumber
Anda ingin mendeteksi sesuatu yang berubah tiba-tiba. Bayangan tidak akan banyak berubah dari satu menit ke menit berikutnya. Kecerahan keseluruhan matahari akan, meskipun.
endolit
2
Bayangan akan bergerak cepat, jika ada misalnya mobil melaju dan menjatuhkan bayangannya sendiri melalui jendela atau menjatuhkan bayangan beberapa benda lain dengan lampu depannya.
Philipp Wendt
4

Teknik "faktorisasi matriks" TIDAK akan membantu Anda melakukan pekerjaan Anda! Makalah dimaksud oleh @ mirror2image adalah tentang pengurangan latar belakang tetapi TIDAK berdasarkan "faktorisasi matriks".

Menggunakan video yang berjalan untuk mendeteksi objek bergerak (baik manusia atau kendaraan) adalah bidang penelitian aktif.

Sebagai prinsip dasar, sistem memperkirakan latar belakang statis tipikal dengan mengambil sampel lebih dari beberapa gambar dan mengambil perbedaan energi antara gambar yang masuk ke latar belakang. Jika energinya signifikan, piksel tersebut diklasifikasikan sebagai latar depan. Kumpulan foreground seperti itu memberi tahu Anda jika ada entri objek dalam sistem.

Referensi terbaik untuk makalah penelitian Anda (dan juga relatif lebih sederhana jika Anda ingin benar-benar menerapkan) adalah - Sistem W4 temukan di sini dan lihat makalah Picardi di sini sebagai survei yang lebih rinci untuk teknik lain dalam sistem.

Ada banyak tantangan yang berlaku untuk masalah ini:

  1. Kehadiran kebisingan menciptakan masalah ambiguitas utama. Pendekatan di sini adalah menerapkan penyaringan temporal yang efisien dan mempertimbangkan variasi kebisingan untuk membuatnya kebal terhadap ambang batas.

  2. Kehadiran bayangan menciptakan ambiguitas baik sebagai latar depan maupun. Ada kertas yang memodelkan perbedaan warna vs intensitas untuk membedakan bayangan vs latar depan nyata.

  3. Latar belakangnya bisa kompleks seperti melambaikan pohon atau laut, dll.

  4. Latar belakang dapat memiliki variasi pencahayaan yang lambat atau tiba-tiba di mana latar belakang yang "dipelajari" sebelumnya kemudian disesuaikan dengan yang baru.

Salah satu kertas tengara yang paling disebut disebut Algoritma Wall flower menunjukkan cara terbaik untuk menggabungkan berbagai skenario untuk menghasilkan deteksi objek bergerak yang kuat.

Dipan Mehta
sumber
2

Saya tidak tahu solusi pasti, tetapi Anda harus membuat semacam hash dari gambar; satu set data yang lebih kecil diekstraksi dari gambar, yang sebanding lebih baik dari keseluruhan gambar.

Saya pikir, histogram warna adalah pilihan yang baik untuk itu.

Jika Anda membagi gambar ke area dan membuat histogram terpisah untuk area ini, Anda dapat menentukan posisi / jalur penyusup.


sumber
Terima kasih banyak, saya akan menunggu solusi lain, jika saya tidak dapat menemukan yang lebih baik, akan menerima solusi Anda. FYI, saya tidak ingin menentukan jalur penyusup, karena 1 menit tidak cukup untuk itu, tetapi hanya mengirimkan peringatan itu bagus. Terima kasih.
1
Hati-hati, beberapa penyusup bisa selesai dalam 1 menit! Lakukan pemeriksaan sesering mungkin. Jika program Anda terlalu lambat, kurangi resolusi gambar.
1
Ya, pada kenyataannya, saya berencana untuk mengambil gambar setiap 10-an, dan hanya mengunggahnya ketika saya mendeteksi penyusup, atau setiap menit ketika tidak ada masalah.
1

Mengambil perbedaan dua kali yaitu perbedaan perbedaan dapat membantu .. jadi jika turunan ganda piksel lebih besar dari ambang batas di beberapa wilayah, maka Anda dapat menyebutnya sebagai seseorang memasuki ruangan. Perubahan kecerahan akan memberikan gradien yang konstan di seluruh gambar, tetapi mengambil Hessian atau turunan ganda akan memberikan indikasi gerakan yang baik atau perubahan besar dalam ruangan.

KV Vijay Girish
sumber