为什么image.astype(uint8)与Python中的np.clip(image.asttype(uint32)



我对代码的行为有点困惑。

我有一个值在[0255]范围内的image张量,我添加了一些高斯噪声,使得到的张量的值在更大且现在连续的范围内,例如ca。[253.234581.613]。

然后,应通过plt.imshow(...)对该张量进行可视化。

出于这个和其他目的,我想将张量强制转换为uint类型。然而,我在以下方法之间遇到了一些奇怪的差异,我想确定正确的方法:

  1. plt.imshow(image.astype(np.uint32))
  2. plt.imshow(image.astype(np.uint8))
  3. 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将创建不同的结果。

最新更新