【发布时间】:2021-07-14 14:13:00
【问题描述】:
我在 2 张图片上运行以下代码:
ndvi = np.divide(img8 - img4, img8+img4)
invalid = (ndvi > 1).any()
if invalid:
print("Stopping Execution")
print(ndvi)
img8 和 img4 是 2 个图像,并且具有所有正值。
ndvi 是 (img8-img4)/(img8+img4)
因此,根据定义,ndvi 的所有元素都应介于 -1 和 1 之间。 但我得到了一些值>1
这个上下文中所有变量的dtypes都是'uint16'
当我检查无效值的索引并运行单个代码时:
temp = (img8[88][118]-img4[88][118])/(img8[88][118]+img4[88][118])
我收到以下警告:
<stdin>:1: RuntimeWarning: overflow encountered in ushort_scalars
这些值是: img8[88][118] = 1462 img4[88][118] = 1652
值本身不大会导致溢出,但是当数组变大时会发生溢出。
【问题讨论】:
-
也许
img8和/或img4中的值不是您认为的那样。打印出来 -
另外,请注意,如果
img4中的值大于img8中的相应值,那么您将得到负值 -
@DeepSpace 是的,我明白了。我的意思是它会在 -1 和 1 之间。
-
请打印所有内容的 dtypes (img8, img4, img4+img8, img8-img4)
-
这可能是由于
np.divide使用嵌套/多维数组的方式。发布minimal reproducible example
标签: python image numpy integer-overflow uint