【发布时间】:2012-03-04 07:51:06
【问题描述】:
我认为这会更容易,但过了一段时间我终于放弃了,至少几个小时......
我想从一组延时摄影中重现这张尾随的星星图像。受此启发:
The original author 使用了通过 VirtualDub 拍摄并与 imageJ 结合的低分辨率视频帧。我想我可以很容易地重现这个过程,但使用 Python 的方法更注重内存,所以我可以使用 the original high-resolution images 获得更好的输出。
我的算法思路很简单,一次合并两张图片,然后通过合并得到的图片和下一张图片进行迭代。这样做了数百次,并对其进行了适当的权衡,以便每张图像对最终结果都有相同的贡献。
我对 python 还很陌生(而且我不是专业程序员,这一点很明显),但环顾四周,在我看来 Python Imaging Library 是非常标准的,所以我决定使用它(纠正我如果您认为其他东西会更好)。
这是我目前所拥有的:
#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")
这符合预期,但生成的图像很暗,如果我只是尝试增强它,很明显,由于像素值缺乏深度,信息丢失了。 (我不确定这里的正确术语是什么,颜色深度、颜色精度、像素大小)。 这是使用低分辨率图像的最终结果:
或者我正在尝试使用完整的 4k x 2k 分辨率(来自另一组照片):
所以,我尝试通过设置图像模式来修复它:
firstimage=Image.open("./"+files[0])
size = firstimage.size
finalimage=Image.new("I",size)
但显然 Image.blend 不接受该图像模式。
ValueError: 图像模式错误
有什么想法吗?
(我还尝试通过在将它们与 im.point(lambda i: i * 2) 组合之前将它们相乘来使图像“不那么暗”,但结果同样糟糕)
【问题讨论】:
-
您的图片的权重不均等。例如,您的第一张图片的不透明度为
1 / (1 + 1) = 0.5,而您的第九张图片的不透明度为0.1。 -
搅拌机,我认为它的权重相同。当 i = 0, 1/(i+1) = 1 时,对于第一次迭代,该图像的权重为 0.5,因为其他 0.5 由第二张图像(文件 [1])获取,然后当 i=2 , file[2] 的权重为 0.33,前两个加起来总共是 0.66.. 即每个 0.33。所以第 9 张图片确实有 0.1 alpha,但这意味着前 8 张的组合不透明度为 0.9,即每张图片 0.1(考虑 file[0])。
-
不,@Blender 是对的,您需要每张图片的权重不变,即
1/len(files)。如果您总共有 2 张图像,则每张图像的权重为 0.5。如果您总共有 10 张图片,则每张图片的权重为 0.1。 -
我确信这就是它所得到的(同等重量)。使用混合函数,每次调用时结果都会被归一化,也就是说,如果我将第一个贡献加权 0.1(对于 10 个图像),例如黑色背景,当下一次迭代到来时,这个 0.9 黑色的图像和0.1 图像将成为下一次混合贡献的 0.9 部分。第一个图像将贡献 0.09,第二个图像将贡献 0.1。最后,第 10 个图像将贡献 0.1,第一个将贡献 0.039(即 0.1*(0.9)^10)。混合 = image1 * (1.0 - alpha) + image2 * alpha
标签: python image python-imaging-library astronomy color-depth