Tôi cảm thấy khó khăn khi tưởng tượng một tình huống trong đó bộ nhớ là một vấn đề ở đây, nhưng trong sự kiện (không thể) mà bạn hoàn toàn không đủ khả năng để tạo ra mảng phao cần thiết cho câu trả lời ban đầu của tôi, bạn có thể sử dụng chức năng pha trộn của PIL, như được đề xuất bởi @ Mhurley như sau:
Bạn có thể lấy đúng trình tự của các giá trị alpha, bắt đầu bằng định nghĩa từ hàm pha trộn của PIL:
Hãy suy nghĩ về việc áp dụng hàm đó đệ quy vào một vectơ số (chứ không phải hình ảnh) để có được giá trị trung bình của vectơ. Đối với một vectơ có độ dài n, bạn sẽ cần các hoạt động pha trộn N-1, với các giá trị n-1 khác nhau của alpha. Tuy nhiên, có lẽ dễ suy nghĩ trực quan hơn về các hoạt động. Ở mỗi bước, bạn muốn hình ảnh AVG chứa tỷ lệ bằng nhau của hình ảnh nguồn từ các bước trước đó. Khi pha trộn các hình ảnh nguồn thứ nhất và thứ hai, alpha phải là 1/2 để đảm bảo tỷ lệ bằng nhau. Khi pha trộn thứ ba với mức trung bình của hai cái đầu tiên, bạn muốn hình ảnh mới được tạo thành từ 1/3 của hình ảnh thứ ba, phần còn lại được tạo thành trung bình của các hình ảnh trước đó (giá trị hiện tại của AVG) , và như thế. Về nguyên tắc, câu trả lời mới này, dựa trên sự pha trộn, sẽ ổn. Tuy nhiên tôi không biết chính xác chức năng pha trộn hoạt động như thế nào. Điều này khiến tôi lo lắng về cách các giá trị pixel được làm tròn sau mỗi lần lặp. Hình ảnh dưới đây được tạo từ 288 hình ảnh nguồn bằng cách sử dụng mã từ câu trả lời ban đầu của tôi: Mặt khác, hình ảnh này được tạo ra bằng cách áp dụng nhiều lần chức năng pha trộn của PIL cho cùng 288 hình ảnh: Tôi hy vọng bạn có thể thấy rằng các đầu ra từ hai thuật toán khác nhau đáng kể. Tôi mong đợi điều này là do tích lũy các lỗi làm tròn nhỏ trong quá trình áp dụng hình ảnh lặp đi lặp lại. Tôi thực sự đề xuất câu trả lời ban đầu của tôi về sự thay thế này. Trang này cho thấy cách tạo hình ảnh trung bình của các mảng hình ảnh bằng mô -đun Python và PIL (Thư viện hình ảnh Python). Thật dễ dàng để làm bằng cách chuyển đổi hình ảnh thành numpy.array. Trong & nbsp; [1]: %matplotlib inline import matplotlib.pyplot as plt import numpy as np from PIL import Image Tạo hình ảnh gốc Trong & nbsp; [2]: for i in range(1, 21): col = int(255 * i / 20) img = Image.new('RGB', (120, 80), color=(col, col, col)) img.save('%02d.bmp' % i, format='bmp') Tải các hình ảnh gốc được lưu ngay trên In & nbsp; [3]: ims = [] for i in range(1, 21): ims.append(Image.open('%02d.bmp' % i, mode='r')) Kiểm tra hình ảnh gốc Chuyển đổi hình ảnh được tải thành Nandarray Numpy Trong & nbsp; [7]: ims = np.array([np.array(im) for im in ims]) Kiểm tra hình dạng của mảng IMS Tạo mảng trung bình Trong & nbsp; [9]: imave = np.average(ims,axis=0) Kiểm tra hình dạng của mảng IMS Tạo mảng trung bình Trong & nbsp; [9]: result = Image.fromarray(imave.astype('uint8')) Chuyển đổi hình ảnh trung bình (trong float) thành hình ảnh PIL (UINT8) Trong & nbsp; [11]: result.save('result.bmp') |