, как белые имеет, вероятно, более высокое значение (в каждом канале может быть? Я не знаю, как формат ваших данных). Вы получаете отрицательные значения, которые, как я полагаю, обрезаны до 0 (черный). Посмотрите, как ваша рубашка зеленая, когда вы вычеркиваете из нее красный (доска в фоновом режиме).
Вы должны замаскировать фон, проверив, что изменилось, а затем удалите все, что не изменилось.
может быть что-то вроде
diff =y-back
if (element of diff unequal 0) then set element to 1
noback = diff .* y
небольшой пример я писал:
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
Вы, возможно, придется использовать что-то другое, чем найти для маски, потому что изображение не будет 100% то же самое , но это должно показать общий подход.
Пожалуйста, предоставьте исходные изображения, чтобы мы могли вам помочь. Вы также не выполняете вычитание фона должным образом. Для этого требуется наличие маски, которая обозначает то, что отличается от эталонного кадра, и индексирование в новый кадр для извлечения выбранных пикселей. – rayryeng