Làm thế nào tôi có thể so sánh hai hình ảnh từ máy ảnh và cho biết nếu có đủ sự khác biệt để phát hiện chuyển động?


18

Tôi muốn sử dụng điện thoại của mình như một hệ thống camera quan sát để điều khiển một căn phòng trong nhà và hiển thị cảnh báo khi có thứ gì đó đang di chuyển.

Hiện tại, những gì tôi đã thành công là lấy một bức ảnh mỗi phút và tải chúng qua tập lệnh PHP lên máy chủ của tôi. Bây giờ, tôi muốn so sánh ảnh hiện tại và ảnh 1 phút trước và phát hiện nếu có ai đó bước vào phòng. Về cơ bản, tôi sẽ cần so sánh sự khác biệt của các pixel trên ảnh (nhưng cũng tính đến việc một đám mây có thể chỉ nói xin chào và thay đổi độ sáng trong một phút)

Có ai có manh mối về cách đạt được điều đó hoặc một số tài liệu để đọc không?


4
Tôi đã làm một cái gì đó như thế này nhiều năm trước. Kỹ thuật của tôi là chia hình ảnh thành các phần, giả sử lưới 20 * 20, tìm giá trị cho màu trung bình trong mỗi ô (bằng cách lấy màu trung bình trong mỗi pixel trong ô đó) và lưu trữ. Thực hiện tương tự cho hình ảnh tiếp theo và nếu có đủ (tôi sẽ để mức độ chịu đựng đó tùy thuộc vào bạn) trong các màu trung bình, bạn có thể giả sử chuyển động. Đừng làm cho dung sai tốt đến mức nó sẽ nhận thấy những thay đổi tinh tế trong ánh sáng hoặc chuyển bóng, v.v.

1
Đây là một bài viết thú vị về chủ đề mà bạn có thể tìm thấy codeproject.com/KB/audio-video/Motion_Detection.aspx

CHDK cũng chia hình ảnh thành một lưới. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Để phát hiện chuyển động và không phát hiện thay đổi ánh sáng, tôi sẽ nói rằng một sự thay đổi trong nhiều ô lưới không phải là chuyển động, trong khi đó chỉ thay đổi trong một vài ô lưới.
endolith

Câu trả lời:


10

Dường như với tôi những gì bạn đang tìm kiếm là kỹ thuật trừ nền. Với hình ảnh ồn ào và điều kiện ánh sáng thay đổi, nó có thể là không cần thiết. Trạng thái hiện tại của kỹ thuật nghệ thuật cho điều này là biểu diễn ma trận thứ hạng thấp, nhưng nó không yêu cầu hai mà nhiều (~ chục) hình ảnh. Một số phép toán nặng theo sau: Mỗi hình ảnh được coi là một vectơ pixel, vectơ kết hợp thành ma trận và ma trận này được phân rã thành ma trận thứ hạng thấp và tàn dư. Các cột ma trận thứ hạng thấp là nền và tàn dư là các đối tượng chuyển động. Có một số triển khai nguồn mở, nhưng chỉ để nhân tố hóa, không hoàn thành đường ống hình ảnh IIRC

Dưới đây là một bài báo và mã cho nhân tố ma trận http://www.ece.rice.edu/~aew2/sparcs.html

Dưới đây là tổng quan từ blog CS và liên kết đến mã khác:

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

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

Khảo sát một số kỹ thuật khác: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf


1
bạn đã cố tình làm CW này?
Lorem Ipsum

1
"CW" có nghĩa là gì?
mirror2image

À, wiki-câu hỏi. Tôi nghĩ rằng sẽ là ý tưởng tốt để giới thiệu công nghệ khá mới này để làm những việc thực tế. Hãy loại bỏ nó nếu bạn không đồng ý. Ngoài ra các ppl khác có thể có nhiều kinh nghiệm hơn với công nghệ này - Tôi chỉ bắt đầu đi sâu vào nó.
mirror2image

CW là một câu hỏi cộng đồng-Wiki. Điều này có nghĩa là bạn sẽ không nhận được danh tiếng (trong trường hợp này là 4x10 = 40) cho các câu trả lời cho câu trả lời của bạn. Một số người cố tình đưa ra câu trả lời của họ như thế này, nhưng thường xuyên hơn không, đó là sự tình cờ. Tôi đã hoàn nguyên điều này cho bạn, để bạn có được đại diện của mình. Bây giờ là 181 từ 126 :)
Lorem Ipsum

5

Hãy nhớ rằng: Có bóng (không chỉ độ sáng).

Tôi thực sự không thích ý tưởng từ James Webster, vì về cơ bản nó đang giảm độ phân giải theo từng chiều và so sánh các hình ảnh được thu nhỏ lại (tôi cũng không thích các ngưỡng - chúng phải tùy ý, bạn phải kiểm tra và điều chỉnh chúng cho đến khi bạn nhận được một giá trị tốt và ngày hôm sau những giá trị này có thể bị lỗi thời do thời tiết khác nhau hoặc một số tác động môi trường khác)

Nhưng để công bằng, tôi cũng không có một giải pháp thực sự tốt. Ý tưởng đầu tiên của tôi là khuếch tán từng hình ảnh thành một hình ảnh tham chiếu của căn phòng trống và chạy một phát hiện cạnh trên hình ảnh khác. Nhưng điều này cũng sẽ phát hiện bóng tối. Nhưng tôi đoán bạn không thể khác nhau giữa bóng tối và các vật thể khác ... ít nhất là tôi không biết làm thế nào. Nhưng có lẽ bạn có thể so sánh kết quả sau khi phát hiện Edge giữa 2 khung hình, vì bóng chủ yếu di chuyển chậm (vẫn sẽ có vấn đề khi ô tô di chuyển hoặc khi đám mây di chuyển qua)


Bạn muốn phát hiện điều gì đó thay đổi đột ngột. Bóng sẽ không thay đổi nhiều từ phút này sang phút khác. Độ sáng tổng thể của mặt trời sẽ, mặc dù.
endolith

2
Bóng sẽ di chuyển nhanh, nếu có một chiếc ô tô đang di chuyển và thả bóng của chính nó qua cửa sổ hoặc thả bóng của một số vật thể khác bằng đèn pha của nó.
Philipp Wendt

4

Kỹ thuật "nhân tố ma trận" sẽ KHÔNG giúp bạn thực hiện công việc của mình! Bài viết được đề cập bởi @ mirror2image là về phép trừ nền nhưng KHÔNG dựa trên "hệ số ma trận".

Sử dụng video đang chạy để phát hiện các vật thể chuyển động (có thể là con người hoặc phương tiện) là một lĩnh vực nghiên cứu tích cực.

Theo nguyên tắc cơ bản, hệ thống ước tính một nền tĩnh điển hình bằng cách lấy mẫu trên nhiều hình ảnh và lấy sự khác biệt về năng lượng giữa hình ảnh đến nền. Nếu năng lượng là đáng kể, pixel được phân loại là tiền cảnh. Tập tiền cảnh như vậy cho bạn biết nếu có một mục của đối tượng trong hệ thống.

Tài liệu tham khảo tốt nhất cho bài nghiên cứu của bạn (và cũng tương đối đơn giản hơn nếu bạn muốn thực sự thực hiện) sẽ là - Hệ thống W4 tìm thấy nó ở đây và xem bài báo Picardi ở đây như một khảo sát chi tiết hơn cho các kỹ thuật khác trong hệ thống.

Có nhiều thách thức áp dụng cho vấn đề:

  1. Sự hiện diện của tiếng ồn tạo ra các vấn đề mơ hồ lớn. Cách tiếp cận ở đây là áp dụng lọc thời gian hiệu quả và xem xét phương sai của tiếng ồn để làm cho nó miễn nhiễm với ngưỡng.

  2. Sự hiện diện của cái bóng tạo ra sự mơ hồ không phải là tiền cảnh cũng không phải. Có những bài viết mô hình hóa màu sắc và sự phân biệt cường độ để phân biệt bóng với tiền cảnh thực.

  3. Nền có thể phức tạp như vẫy cây hoặc biển, v.v.

  4. Nền có thể có sự biến đổi ánh sáng chậm hoặc đột ngột trong đó nền "đã học" trước đó được điều chỉnh phù hợp với nền mới.

Một trong những bài báo được nhắc đến nhiều nhất được gọi là thuật toán hoa tường cho thấy cách tốt nhất để kết hợp nhiều tình huống như vậy để tạo ra sự phát hiện đối tượng chuyển động mạnh mẽ.


2

Tôi không biết giải pháp chính xác, nhưng bạn nên tạo một số loại băm của hình ảnh; một tập dữ liệu nhỏ hơn được trích xuất từ ​​hình ảnh, có thể so sánh tốt hơn toàn bộ hình ảnh.

Tôi nghĩ rằng, biểu đồ màu là một lựa chọn tốt cho nó.

Nếu bạn chia hình ảnh của mình thành các khu vực và tạo biểu đồ riêng cho các khu vực này, bạn có thể xác định vị trí / đường dẫn của kẻ xâm nhập.


Cảm ơn rất nhiều, tôi sẽ chờ đợi các giải pháp khác, nếu tôi không thể tìm thấy tốt hơn, sẽ chấp nhận của bạn. FYI, tôi không muốn xác định đường đi của kẻ xâm nhập, vì 1 phút là không đủ cho điều đó, nhưng chỉ cần gửi một cảnh báo là tuyệt vời. Cảm ơn.

1
Hãy cẩn thận, một số kẻ xâm nhập có thể kết thúc sau 1 phút! Hãy kiểm tra thường xuyên nhất có thể. Nếu chương trình của bạn quá chậm, hãy giảm độ phân giải hình ảnh.

1
Vâng, trên thực tế, tôi dự định sẽ chụp ảnh cứ sau 10 giây và chỉ tải chúng lên khi tôi phát hiện ra kẻ xâm nhập hoặc mỗi phút khi không có vấn đề gì.

1

Lấy chênh lệch hai lần tức là chênh lệch chênh lệch có thể giúp ích .. vì vậy nếu đạo hàm kép của pixel lớn hơn ngưỡng ở một số vùng, vì vậy bạn có thể gọi nó là một người nào đó bước vào phòng. Sự thay đổi độ sáng sẽ tạo ra độ dốc xấp xỉ không đổi trong suốt hình ảnh, nhưng lấy đạo hàm Hessian hoặc kép sẽ cho dấu hiệu tốt về chuyển động hoặc thay đổi lớn trong phòng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.