python - 即使在逐点向每个元素添加 1 后,numpy 数组中的最小元素仍为零

标签 python numpy

我正在尝试获取图像的日志以进行进一步处理,图像中的最小像素值为零,因此我尝试采用 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/

相关文章:

python - 在 python 中缩写双重比较

python - MANIFEST.IN中包含的数据文件存储在哪里?

python - 如何在numpy python数组的行尾添加数字

python - Numpy-从一维数组中删除最后一个元素的最佳方法?

python - 使用数组的 Numpy 索引

python - 无法导入 pygpu

python - Django 时区与日期时间

python - 如何压缩两个不同大小的列表?

python - 使用 scipy、python、numpy 进行非线性 e^(-x) 回归

python - Numpy:用 numpy 数组替换 numpy 数组中的零