我对代码的行为有点困惑。
我有一个值在[0255]范围内的image
张量,我添加了一些高斯噪声,使得到的张量的值在更大且现在连续的范围内,例如ca。[253.234581.613]。
然后,应通过plt.imshow(...)
对该张量进行可视化。
出于这个和其他目的,我想将张量强制转换为uint
类型。然而,我在以下方法之间遇到了一些奇怪的差异,我想确定正确的方法:
plt.imshow(image.astype(np.uint32))
plt.imshow(image.astype(np.uint8))
plt.imshow(np.clip(image.astype(np.uint32), 0, 255))
方法(1(会导致预期的"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers)."
警告。然后我假设这个图像像np.clip
一样被剪裁到[0255]范围内的值。
方法(2(和(3(导致的值在[0255]范围内,因此不会引发异常,但它们的平均值不同。
方法(1(和(3(导致相同的可视化,而(2(导致不同的图像(例如,稍微更暗和更嘈杂(。
我目前不知道为什么会发生这种情况。转换为uint32
然后进行剪裁与最初转换为uint8
不同吗?
如果图像中有任何负值,则转换为uint32is或uint8将创建不同的结果。