堆疊天文圖片我認爲這將是更容易,但一段時間後,我終於放棄了這一點,至少在幾個小時......與Python
我想重現此尾隨從timelapse套圖片的星形圖象。受此啓發:
The original author使用了VirtualDub拍攝的低分辨率視頻幀並與imageJ結合使用。我想我可以很容易地重現這個過程,但是使用Python的更有記憶力的方法,所以我可以使用the original high-resolution images來獲得更好的輸出。
我的算法思路很簡單,一次合併兩個圖像,然後通過將生成的圖像與下一個圖像合併進行迭代。這樣做了幾百次,並適當權衡,以便每個圖像對最終結果具有相同的貢獻。我對Python很新穎(而且我不是專業的程序員,這很明顯),但是在我看來,Python成像庫是非常標準的,所以我決定使用它(正確的如果你認爲別的會更好的話)。
這是我到目前爲止有:
#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")
這做什麼它應該,但產生的圖像是暗的,如果我只是一味的提升呢,很明顯這些信息被丟失,由於缺乏深度以像素值表示。 (我不確定此處的適當術語是什麼,顏色深度,顏色精度,像素大小)。 下面是使用低分辨率圖像的最終結果:
或一個我一直在與2K分辨率的全4K嘗試(從另一組照片):
所以,我試圖通過設置圖像模式來修復它:
firstimage=Image.open("./"+files[0])
size = firstimage.size
finalimage=Image.new("I",size)
但顯然Image.blend d oes不接受該圖像模式。
ValueError: image has wrong mode
任何想法?
(我也試圖將它們與im.point合併之前使圖像「少暗」乘以它(拉姆達我:我* 2),但結果一樣糟糕)
您的圖像的權重並不相同。例如,您的第一張圖片的不透明度爲1 /(1 + 1)= 0.5,而您的第9張圖片的不透明度爲0.1。 – Blender 2012-02-12 19:00:05
攪拌機,我認爲它是同等重量。當i = 0時,1 /(i + 1)= 1,則對於第一次迭代,圖像具有0.5的權重,因爲另一個0.5被第二圖像(文件[1])取得,並且當i = 2 ,文件[2]的權重爲0.33,前兩者合計爲0.66,即0.33。所以第9張圖像確實有0.1個alpha,但這意味着前8個圖像的組合不透明度爲0.9,即每個圖像0.1(考慮文件[0])。 – JunCTionS 2012-02-12 19:12:48
不,@Blender是對的,你需要每個圖像*的恆定權重,意思是'1/len(files)'。如果您總共有2張圖片,則每張圖片的重量爲0.5。如果總共有10張圖像,則每張圖像的重量爲0.1。 – 2012-02-12 23:41:50