我正在尝试使用Dejan Noveski的代码创建一个使用PIL模块计算python中图像熵的函数。
def image_entropy(img):
hgram = np.histogram(img)
histogram_length = sum(hgram)
samples_probability = [float(h) / histogram_length for h in hgram]
return -sum([p * math.log(p, 2) for p in samples_probability if p != 0])
它引发以下错误
File "test.py", line 45, in <module>
I_e=image_entropy(I)
File "test.py", line 11, in image_entropy
histogram_length = sum(hgram)
File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 1510, in sum
out=out, keepdims=keepdims)
File "/usr/lib/python2.7/dist-packages/numpy/core/_methods.py", line 18, in _sum
out=out, keepdims=keepdims)
ValueError: operands could not be broadcast together with shapes (10) (11)
我不明白为什么它会产生广播错误,因为我不考虑任何乘积,只取矩阵的总和。有人可以帮我吗。
先感谢您
numpy.histogram返回一个2元组:直方图和bin边缘数组。所以
hgram = np.histogram(img)
应该
hgram, bin_edges = np.histogram(img)
如果使用,hgram = np.histogram(img)
则将hgram
分配给2元组。Python非常乐于这样做。那里没有引发异常。但是,当Python求值时,sum(hist)
它将尝试对中的两项进行求和hist
。一个(直方图值)是一个长度为10的数组,另一个(直方图边)是一个长度为11的数组。这就是发生ValueError的地方。
np.histogram(img)
期望img
是一个数组。如果img
是PIL图像,则使用im.histogram方法
hgram = img.histogram()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句