myślałem, że to będzie łatwiejsze, ale po pewnym czasie ja ostatecznie rezygnując z tego, przynajmniej na kilka godzin ...Stacking zdjęć astronomia Pythona
Chciałem odtworzyć ten jest przecinkiem obraz gwiazdy z zestawu zdjęć timelapse. Inspirowany przez sposób:
The original author stosowane klatki wideo o niskiej rozdzielczości przyjmować VD i połączone z ImageJ. Wyobraziłem sobie, że mogę łatwo odtworzyć ten proces, ale z bardziej świadomym pamięcią podejściem z Pythonem, więc mógłbym użyć the original high-resolution images dla lepszego wyjścia.
Pomysł mojego algorytmu jest prosty, łącząc dwa obrazy naraz, a następnie iterując, łącząc wynikowy obraz z następnym obrazem. Dokonano tego setki razy i właściwie ważono, aby każdy obraz miał taki sam wkład do końcowego wyniku.
Jestem całkiem nowy dla Pythona (i nie jestem profesjonalnym programistą, to będzie oczywiste), ale rozglądając się wokół wydaje mi się, że Python Imaging Library jest bardzo standardowa, więc zdecydowałem się go użyć (poprawne mnie, jeśli myślisz, że coś innego byłoby lepsze).
Oto co mam do tej pory:
#program to blend many images into one
import os,Image
files = os.listdir("./")
finalimage=Image.open("./"+files[0]) #add the first image
for i in range(1,len(files)): #note that this will skip files[0] but go all the way to the last file
currentimage=Image.open("./"+files[i])
finalimage=Image.blend(finalimage,currentimage,1/float(i+1))#alpha is 1/i+1 so when the image is a combination of i images any adition only contributes 1/i+1.
print "\r" + str(i+1) + "/" + str(len(files)) #lousy progress indicator
finalimage.save("allblended.jpg","JPEG")
To co robi to miało jednak uzyskany obraz jest ciemny, a jeśli ja po prostu staram się poprawić to, to jest oczywiste, że informacje zostały utracone z powodu braku głębokości w wartościach pikseli. (Nie jestem pewien, jaki jest tu właściwy termin, głębia koloru, precyzja koloru, rozmiar w pikselach). Oto ostateczny wynik stosując obrazy o niskiej rozdzielczości:
lub jeden starałem pełną 4k uchwałą 2k (z innego zestawu zdjęć):
Więc, próbowałem to naprawić poprzez ustawienie trybu obrazu:
firstimage=Image.open("./"+files[0])
size = firstimage.size
finalimage=Image.new("I",size)
ale widocznie Image.blend d Oe nie akceptują tego trybu obrazu.
ValueError: image has wrong mode
Wszelkie pomysły?
(próbowałem też podejmowania obrazy „mniej ciemno” przez pomnożenie go przed połączeniem ich z im.point (lambda I: I * 2), ale wyniki były tak złe)
Twoje zdjęcia nie są jednakowo ważone. Na przykład, twoje pierwsze zdjęcie ma krycie "1/(1 + 1) = 0,5", a twoje 9 zdjęcie ma krycie "0,1". – Blender
Blender, myślę, że jest równie ważony. gdy i = 0, 1/(i + 1) = 1, to dla pierwszej iteracji obraz ma wagę 0,5, ponieważ drugi 0.5 jest brany przez drugi obraz (plik [1]), a następnie, gdy i = 2 , plik [2] ma wagę 0,33, pozostawiając pierwsze dwa w sumie 0,66 .. czyli 0,33 każdy. Tak więc dziewiąty obraz rzeczywiście ma 0,1 alfa, ale oznacza to, że pierwsze 8 ma połączone krycie 0,9, to jest 0,1 na obraz (biorąc pod uwagę plik [0]). – JunCTionS
Nie, @Blender ma rację, potrzebujesz * stałej wagi dla każdego obrazu *, co oznacza '1/len (pliki)'. Jeśli masz 2 obrazy, każdy obraz dostaje 0,5. Jeśli masz 10 zdjęć, każdy obraz ma wagę 0,1. –