Поскольку вы не предоставили никаких входных данных, я использовал отдельные кадры этой анимации в качестве своих 18 входных кадров для усреднения по:
Я извлек их, используя ImageMagick :
magick animation.gif -coalesce frame-%02d.jpg
Код, который я придумал, выглядит так:
#!/usr/bin/env python3
import glob
import numpy as np
from PIL import Image
# Generate list of image names
names = glob.glob('frame-*.jpg')
# Load all images into list
images = []
for filename in names:
im = Image.open(filename)
images.append(np.array(im))
# Generate average image, where each pixel is the average of that pixel position across all images
average = np.mean(images, axis=0)
Image.fromarray(average.astype(np.uint8)).save('tmp-average.png') # DEBUG
# Generate stdev image, where each pixel is the stdev of that pixel position across all images
stdev = np.std(images, axis=0)
Image.fromarray(stdev.astype(np.uint8)).save('tmp-stdev.png') # DEBUG
threshold = 80
average[np.any(stdev>threshold, axis=2)] = [255,0,0]
Image.fromarray(average.astype(np.uint8)).save(f'result.png')
И результат такой:
Ради интереса я немного позаботился о том, как установить порог по-разному: