获取所有帧中像素的平均值



我在一个列表中保存了14400个值,代表垂直4像素,水平6像素和600帧。

如果有人感兴趣,这里是值

# len of blurry values 14400
data = np.array(blurry_values)
#shape of data (4, 6, 600)
shape = ( 4,6,600 )
data= data.reshape(shape)
#print(np.round(np.mean(data, axis=2),2))
[[0.89 0.37 0.45 0.44 0.51 0.52]
[0.5  0.47 0.53 0.48 0.48 0.53]
[0.49 0.5  0.5  0.53 0.48 0.54]
[0.48 0.51 0.45 0.55 0.5  0.49]]

然而,当我通过执行以下操作来确认第一个平均值的完整性时

list1 = blurry_values[::23]
np.round(np.mean(list1),2)
我得到0.51而不是0.89

我试图在所有帧中获得像素的平均值。为什么这些值不同?

我不知道确切的原因,但是:

list1 = blurry_values[:600]

0.89为

list1 = blurry_values[600:1200]

0.37为

Python通过首先填充最后一个维度开始重塑,i believe.

让我们用一个更小的数组来解决这个问题:

import numpy as np
np.random.seed(42)
values = np.random.randint(low=0, high=100, size=48)
shape = (2,4,6)
data = values.reshape(shape)  # 2 frames of 4 pixels by 6 pixels each
print(data, 'n')
print(np.round(np.mean(data, axis=0),2), 'n')  # average values across frames
list1 = values[::24]
print(np.round(np.mean(list1),2))  # average of first pixel across frames

输出:

[[[51 92 14 71 60 20]
[82 86 74 74 87 99]
[23  2 21 52  1 87]
[29 37  1 63 59 20]]
[[32 75 57 21 88 48]
[90 58 41 91 59 79]
[14 61 61 46 61 50]
[54 63  2 50  6 20]]] 
[[41.5 83.5 35.5 46.  74.  34. ]
[86.  72.  57.5 82.5 73.  89. ]
[18.5 31.5 41.  49.  31.  68.5]
[41.5 50.   1.5 56.5 32.5 20. ]] 
41.5

因为我没有看到产生blurry_values的代码,我不能100%确定,但我猜你错误地重新塑造了blurry_values.

在大多数编程场景中,我希望像素高度和像素宽度由最后两个轴表示,帧由这两个轴之前的一个轴表示。

所以,我猜你的形状应该是shape = (600, 4, 6)而不是shape = (4, 6, 600)

在这种情况下,你应该做np.round(np.mean(data, axis=0),2)而不是np.round(np.mean(data, axis=2),2)。顺便说一句,这也会产生(4, 6)的形状。

然后,对于的完整性检查,你应该这样做:
list1 = blurry_values[::24] # Note that it's 24, not 23
np.round(np.mean(list1),2)

您应该检查np.round(np.mean(data, axis=0),2)的第一个值是否与np.round(np.mean(list1),2)的第一个值相同。(不过我自己还没有测试过)。

最新更新