CV - Unterschiede zwischen zwei Bildern extrahieren

Ich arbeite derzeit an einem Intrusionssystem, das auf Videoüberwachung basiert. Um diese Aufgabe abzuschließen, mache ich eine Momentaufnahme des Hintergrunds meiner Szene (vorausgesetzt, es ist völlig sauber, keine Personen oder sich bewegenden Objekte). Dann vergleiche ich den Rahmen, den ich von der (statischen) Videokamera bekomme, und suche nach den Unterschieden. Ich muss in der Lage sein, @ zu überprüfirgendei Unterschiede, nicht nur die menschliche Form oder was auch immer, so kann ich keine spezifischen Features extrahieren.

ormalerweise habe ich:

Ich benutze OpenCV, um das zu vergleichen, mache ich im Grunde:

cv::Mat bg_frame;
cv::Mat cam_frame;
cv::Mat motion;

cv::absdiff(bg_frame, cam_frame, motion);
cv::threshold(motion, motion, 80, 255, cv::THRESH_BINARY);
cv::erode(motion, motion, cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3)));

Hier ist das Ergebnis:

Wie Sie sehen können, ist der Arm abgestreift (aufgrund von Farbunterschieden, denke ich) und das ist leider nicht das, was ich will.

Ich dachte über die Verwendung von @ hinzufügcv::Canny() um die Kanten zu erkennen und den fehlenden Teil des Arms auszufüllen, aber leider (noch einmal) löst es das Problem nur in wenigen Situationen, nicht in den meisten Fällen.

Gibt es einen Algorithmus oder eine Technik, mit der ich ein @ erhalten könntgena Differenzbericht?

PS: Sorry für die Bilder. Aufgrund meines neuen Abonnements habe ich nicht genug Ruf.

BEARBEITE Ich verwende hier ein Graustufenbild, bin aber für jede Lösung offen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage