2017-02-03 2 views
0

Ich nehme zwei Bilder von meinem Video. Einer von dann ist der Hintergrund und der nächste ist der Rahmen, auf den ich Hintergrund Subtraktion angewendet. Das dritte Bild ist das Ergebnis nach dem Hintergrund Abzug. Hier bin ich nur das Hemd der Person und nicht den ganzen Körper.Nicht passende Bild nach Hintergrund Subtraktion

-Code für backgorund Subtraktion

v = VideoReader('test.mp4'); 
n = get(v,'NumberOfFrames'); 
back = read(v,30); 
y = read(v,150); 
imshow([y;back;y-back]); 
+0

Bitte geben Sie die Originalbilder an, damit wir Ihnen helfen können. Sie führen auch keine Hintergrundsubtraktion korrekt durch. Dies erfordert eine Maske, die angibt, was anders ist als der Referenzrahmen, und Indizierung in den neuen Rahmen, um die Pixel, die unterschiedlich sind, herauszuziehen. – rayryeng

Antwort

0

Da weiß hat wahrscheinlich einen höheren Wert (in jedem Kanal vielleicht? Ich weiß nicht, wie das Format der Daten ist). Sie erhalten negative Werte, die dann auf 0 (schwarz) abgeschnitten werden. Sehen Sie, wie Ihr Hemd grün ist, während Sie das Rot davon abziehen (Brett im Hintergrund).

Sie müssen den Hintergrund maskieren, indem Sie überprüfen, was sich geändert hat, und dann alles entfernen, das nicht geändert wurde.

vielleicht so etwas wie

diff =y-back 
if (element of diff unequal 0) then set element to 1 
noback = diff .* y 

ein kleines Beispiel, das ich schrieb:

back = rand(4) 
y = back 
y(5) = 0.6    %put something in front of the background 
y(7) = 0.7    %put something in front of the background 
mask = zeros(4) 
mask(find(y-back)) = 1 %set values that are different in y to 1 
noback = mask.*y   %elementwise multiplication to mask out the background 

Sie müssen für die Maske etwas anderes als finden, benutzen können, weil das Bild nicht zu 100% sein wird, die gleiche , aber dies sollte den allgemeinen Ansatz zeigen.

+0

Der Datentyp des Bildes ist uint8.Kannst du die Verwendung von noback erklären –

+0

'noback' sollte nur das Bild ohne Hintergrund sein. (genau wie dein "Zurück"). Und um das zu erreichen, multiplizieren Sie einfach jedes Pixel mit 0 oder1 (eine binäre Matrix), abhängig davon, ob es Änderungen von hinten gibt. –

+0

@Anoopsaju hat es funktioniert? –