【问题标题】:How to quantify the amount of noise you add to an image如何量化添加到图像中的噪声量
【发布时间】:2019-04-04 15:27:51
【问题描述】:

我正在查看 3D 体积中存在的灰度数据,该数据可以作为 3D numpy 数组导入,值从 -1 到 1。数据是在成像系统上获取的,并描绘了具有更高值和背景的 3D 体积噪声作为随机值。

为了测试一个对齐程序,我目前正在尝试向这个 numpy 数组添加不同级别的噪声。我目前的方法如下:

def RandomNoise():
    """Function to make a numpy array of 100x100x100 of random noise"""
    NoiseArray = np.random.normal(-0.5,0.5,size=(100,100,100))

    return NoiseArray

然后我只需更改值 -0.5 或 0.5 来更改我创建的噪声量。

然后我通过以下方式添加噪音:

Noise = RandomNoise()

Volumewithnoise = (np.clip((Volume + Noise) * (1 - Volume), -1, 1))

虽然这确实使我的图像嘈杂,但我真的不知道如何以任何方式量化我添加的相对于初始图像的噪声量。有谁知道更好的方法吗?

【问题讨论】:

    标签: python numpy noise


    【解决方案1】:

    你的函数有错误,其实random.normal是一个高斯噪声函数,不是均匀分布,所以[-0.5, 0.5]不代表噪声在0.5到-0.5之间

    你应该把你的函数变成这样

    def RandomNoise( magnitude ):
        """Function to make a numpy array of 100x100x100 of random noise"""
        NoiseArray = np.random.normal(0, magnitude ,size=(100,100,100))
    
        return NoiseArray
    

    正如您在docs 中看到的那样,随机正态分布具有均值和标准差。如果要模拟噪声,均值应为零,标准差等于噪声的大小。

    所以这样你就有一个参数来控制噪音量

    【讨论】:

    • 谢谢我一定是误会了这个功能。我说得对吗?这基本上会在 0 y 处绘制一条钟形曲线,幅度为 0.5?也许我应该只使用随机统一函数。
    • 最常见的噪声类型是正常的(高斯)。所以我认为你使用的是正确的。但是,它可能取决于应用程序。在这里,您可以看到您正在生成的噪声的密度函数。 homepage.stat.uiowa.edu/~mbognar/applets/normal.html你说的是钟形曲线,但幅度不是0.5
    • 非常感谢,这非常有用。我假设 sigma 值本质上是我的量级。
    猜你喜欢
    • 2012-02-16
    • 2011-01-27
    • 2021-07-04
    • 1970-01-01
    • 2020-06-14
    • 2021-07-15
    • 2016-01-24
    • 2014-09-05
    相关资源
    最近更新 更多