我正在尝试获取图像的日志以进行进一步处理,图像中的最小像素值为零,因此我尝试采用 log(1+image),但即使在为每个元素添加 1 之后,数组的最小值仍然显示为 0,因此 np.log 抛出日志中遇到的 除以零 并将值设置为 -inf 这给我带来了问题。
import numpy as np
import skimage.io as io
image = io.imread('./PET_image.tif')
image_2 = image + 1
print(np.amin(image))
print(np.amin(image_2))
np.log(image)
两个 print np.amin() 语句都打印出 0。
0
0
error.py:8: RuntimeWarning: divide by zero encountered in log
np.log(image_2)
但是数组加1后最小值不应该是1吗?我很确定我错过了一些非常愚蠢的东西,但这让我头疼,非常感谢任何帮助。
最佳答案
而不是向图像添加 1,然后应用 log
。你可以这样做
np.log1p(image)
这本质上与您尝试使用 +1
实现的功能相同。
您遇到的 +1
错误是由数组 dtype=uint8
的类型引起的。所有像素加 1 会将值为 255 的像素变为 0。
或者您可以仅将 1 添加到值为 0 的像素。
image[np.where(image == 0)] = 1
关于python - 即使在逐点向每个元素添加 1 后,numpy 数组中的最小元素仍为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65251436/