gpt4 book ai didi

python-3.x - 为什么向图像添加高斯噪声会产生白屏?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:47 24 4
gpt4 key购买 nike

我在下面添加的图像 (water_coins.jpg) 中添加了一些高斯噪声,但它返回给我一个完全白色的空白屏幕(对于“noi”和“hoho”)。我不明白为什么

import numpy as np
import cv2


def gauss_noise(image):
row, col, ch = image.shape
mean = 0
var = 0.01
sigma = var ** 0.5
gauss = np.random.normal(mean, sigma, (row, col, ch))
gauss = gauss.reshape(row, col, ch)
print(image)
cv2.imshow("hoho", gauss + image)
noisy = image + gauss
return noisy


img = cv2.imread('water_coins.jpg')
noi = gauss_noise(img)
cv2.imshow("Noisy Gauss image", noi)
cv2.imshow("ho", img)
cv2.waitKey()

Water_coins.jpg

最佳答案

问题是,当您将一个类型为 np.uint8 的图像添加到另一个类型为 float 的图像时,它会生成一个 float 数组。通过 documentation of imshow你有:

If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the value range [0,1] is mapped to [0,255].

这意味着任何大于 1.0 的值都将是白色,只有 0 将是黑色,在您的情况下,它们中的大多数将是白色,因此是白色图像。

现在解决方案:

  1. 将其转换为 uint8 -> 您必须小心下溢(负数)和上溢(大于 255)。尝试双向截断,并决定如何处理小数部分(舍入、截断、取整)。

  2. 将数据标准化为 0-1 -> 取决于你想做什么这可能是危险的,因为它可能会改变颜色,例如,如果所有颜色都在 120-150 左右,你会得到将图像颜色标准化为 0-255。

  3. 在添加之前将噪声数组转换为np.uint8,并使用cv2.add避免饱和问题(下溢和上溢)

关于python-3.x - 为什么向图像添加高斯噪声会产生白屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50641860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com