【发布时间】:2020-05-02 04:47:10
【问题描述】:
我正在尝试使用一个等式重建 HDR 图像,其中我必须对每个 i 值的分子和分母中的 j 个值 (0-15) 求和。有没有更快的方法来做到这一点?也许使用 np.sum?
g 是一个 255 长的一维数组,用于重新映射所有像素值。
lEks 是 15 张图像的日志曝光时间
Z 是一个大小为 [95488, 15] 的数组,第一维是像素索引,第二维是图像编号
def genHDR(Z,g,lEks):
Zi, Zj = Z.shape #[95488, 15]
HDRimage= np.zeros(Zi)
for i in range(Zi):
numerator = 0
denominator = 0
for j in range(Zj):
numerator +=(Z[i,j])*(g[Z[i,j]] - lEks[j])
denominator +=(Z[i,j])
HDRimage[i] = numerator/denominator
return HDRimage
【问题讨论】:
-
变量
g和lEks是什么? -
g 是一个 255 长的数组,用于重新映射像素值,lEks 是 15 张图像的对数曝光时间
-
Numpy 是一个矢量化库(大部分代码都是用 C 编写的,速度非常快)。所以你不要使用 for 循环(在 Python 中非常慢)。假设您有一个数组
time=np.arange(0,1,100),即包含 [0,0.01,..,.0.99]。要将函数应用于所有元素,您可以在将 f 定义为某个频率后编写np.sin(2*np.pi*f*time)。在您的情况下,您可以使用 numpy 函数np.sum()而不是添加 for 循环。
标签: python numpy indexing sum equation