Как получить фон из нескольких изображений, удалив движущиеся объекты? - PullRequest
0 голосов
/ 06 декабря 2018

Я сделал несколько снимков одной и той же сцены с помощью стационарной камеры, в которой есть движущиеся объекты.Я не понимаю, как я могу использовать эти изображения в Python, чтобы получить фоновое изображение, удалив все движущиеся объекты.

Любая помощь будет оценена.Спасибо!

Изображения были прикреплены ниже:

В этом случае я ожидаю, что окончательное изображение будет без рук.

image1:

image2:

image3:

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Вы можете взглянуть на плотный оптический поток, чтобы сегментировать движущиеся объекты.

Вот руководство по OpenCV:

https://docs.opencv.org/3.4/d7/d8b/tutorial_py_lucas_kanade.html

0 голосов
/ 07 декабря 2018

Обновленный ответ

Я решил, как сделать то, что я предложил ниже в Python - но могут быть и лучшие способы - я все еще начинающий Python!

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Load images
im0 = np.array(Image.open('1.jpg'))
im1 = np.array(Image.open('2.jpg'))
im2 = np.array(Image.open('3.jpg'))

# Stack the 3 images into a 4d sequence
sequence = np.stack((im0, im1, im2), axis=3)

# Repace each pixel by mean of the sequence
result = np.median(sequence, axis=3).astype(np.uint8)

# Save to disk
Image.fromarray(result).save('result.png')

enter image description here

Оригинальный ответ

Самый простой способ - взять медиану каждого пикселя на 3 изображениях, потому что 2изображения без руки будут иметь значения рядом друг с другом, а изображение с рукой будет выбросом, а медианный фильтр удаляет выбросы.

Итак, я не имею в виду, что вы смотрите на область 3x3 или 5x5 каждогоизображение и рассчитать медиану.Скорее, я имею в виду, посмотрите на pixel[0,0] на изображениях 1, 2 и 3 и возьмите медиану этих трех значений - вы делаете это, сортируя 3 значения по порядку и выбирая среднее значение трех отсортированных пикселей в качестве выходного значения.Затем посмотрите на pixel[0,1] на всех 3 изображениях и повторите процесс.

Вот результат:

enter image description here

Я не сделалНе могу написать Python, я просто сделал то же самое с ImageMagick в терминале, как это:

convert 1.jpg 2.jpg 3.jpg -evaluate-sequence median result.jpg

Просто чтобы вы могли видеть, что я делаю, если я вычисляюсреднее / среднее значение 3 пикселей в каждом месте, а не медиана, стрелки будут отображаться на 1/3 от их первоначальной плотности:

enter image description here

0 голосов
/ 06 декабря 2018

Чтобы частично ответить на ваш вопрос, ознакомьтесь с методами вычитания фона в учебном пособии OpenCV:

https://docs.opencv.org/master/d1/dc5/tutorial_background_subtraction.html

Для этого нужно определить изменяющиеся пиксели на основе серии изображений (или видео)чтобы вы могли обработать их позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...