我想将噪声应用于由3D numpy数组描绘的体积

问题描述 投票:0回答:1

我有一个包含感兴趣对象的灰度卷。我可以将它作为三维numpy数组导入到python中,浮点数介于-1和1之间。

我的问题有两个方面:

  1. 负浮点数不应该存在,但我不知道如何用随机正浮点数替换每个负浮点数。我过去用于阵列替换的方法对0以下的所有数字应用相同的规则。非常感谢对此的任何帮助。我尝试了以下一行,但很明显,它们都被一个随机数替换掉了: numpyarray[numpyarray < 0] = random.uniform(0,1)
  2. 我希望在整个图像中应用噪声。我希望以这样的方式做到这一点,我可以根据需要多次应用噪声,每次都是随机的。我也希望保持这个物体,即物体外面的东西应该比物体本身更吵闹,但两者都应该比原始体积更吵。该物体往往具有最高的正浮点数,但这并不是说噪声中的偶然体素不能具有相同范围内的值,但这是可以的。

我有一个函数来制作一个正确大小的噪声随机数组(100x100x100):

def RandomNoise():
    NoiseArray = np.random.uniform(0,high=1,size=(100,100,100))

    return NoiseArray

然后我可以通过这个数组乘以我的音量,但它不能很好地维护感兴趣的对象。

我想知道我是否可以计算出一条曲线,并且根据强度在曲线上的位置将定义噪声将如何实现,但我很难想象这将如何工作。任何帮助都将受到大力赞赏。

python numpy image-processing noise-generator
1个回答
1
投票

要用随机值替换负值,一种简单的方法是:

numpyarray = np.where(numpyarray < 0, np.random.uniform(0, 1, size=numpyarray.shape), numpyarray)

但是,这将生成许多不会使用的随机值。如果要保存该工作,可以执行以下操作:

m = numpyarray < 0
numpyarray[m] = np.random.uniform(0, 1, size=np.count_nonzero(m))

关于噪音,你可以缩放它,但功能取决于强度。例如

numpyarray_noise = np.clip(numpyarray + RandomNoise() * (1 - numpyarray), 0, 1)

使用(1 - numpyarray)会使音量越小,音量越强。你也可以使用(1 - numpyarray) ** k和一些k > 0,或像np.exp(1 - 1 / (1 - numpyarray + eps))这样的指数。您也可能有一些规则,例如“应用10%的噪音,并根据强度调整其他90%”。

© www.soinside.com 2019 - 2024. All rights reserved.