我有一个包含感兴趣对象的灰度卷。我可以将它作为三维numpy数组导入到python中,浮点数介于-1和1之间。
我的问题有两个方面:
numpyarray[numpyarray < 0] = random.uniform(0,1)
我有一个函数来制作一个正确大小的噪声随机数组(100x100x100):
def RandomNoise():
NoiseArray = np.random.uniform(0,high=1,size=(100,100,100))
return NoiseArray
然后我可以通过这个数组乘以我的音量,但它不能很好地维护感兴趣的对象。
我想知道我是否可以计算出一条曲线,并且根据强度在曲线上的位置将定义噪声将如何实现,但我很难想象这将如何工作。任何帮助都将受到大力赞赏。
要用随机值替换负值,一种简单的方法是:
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%”。