Обновленный ответ
Я решил, как сделать то, что я предложил ниже в 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](https://i.stack.imgur.com/jAyLn.jpg)
Оригинальный ответ
Самый простой способ - взять медиану каждого пикселя на 3 изображениях, потому что 2изображения без руки будут иметь значения рядом друг с другом, а изображение с рукой будет выбросом, а медианный фильтр удаляет выбросы.
Итак, я не имею в виду, что вы смотрите на область 3x3 или 5x5 каждогоизображение и рассчитать медиану.Скорее, я имею в виду, посмотрите на pixel[0,0]
на изображениях 1, 2 и 3 и возьмите медиану этих трех значений - вы делаете это, сортируя 3 значения по порядку и выбирая среднее значение трех отсортированных пикселей в качестве выходного значения.Затем посмотрите на pixel[0,1]
на всех 3 изображениях и повторите процесс.
Вот результат:
![enter image description here](https://i.stack.imgur.com/CEvnz.jpg)
Я не сделалНе могу написать Python, я просто сделал то же самое с ImageMagick в терминале, как это:
convert 1.jpg 2.jpg 3.jpg -evaluate-sequence median result.jpg
Просто чтобы вы могли видеть, что я делаю, если я вычисляюсреднее / среднее значение 3 пикселей в каждом месте, а не медиана, стрелки будут отображаться на 1/3 от их первоначальной плотности:
![enter image description here](https://i.stack.imgur.com/3l1e5.jpg)