我想将噪声应用于由3D numpy数组描绘的体积
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想将噪声应用于由3D numpy数组描绘的体积相关的知识,希望对你有一定的参考价值。
我有一个包含感兴趣对象的灰度卷。我可以将它作为三维numpy数组导入到python中,浮点数介于-1和1之间。
我的问题有两个方面:
- 负浮点数不应该存在,但我不知道如何用随机正浮点数替换每个负浮点数。我过去用于阵列替换的方法对0以下的所有数字应用相同的规则。非常感谢对此的任何帮助。我尝试了以下一行,但很明显,它们都被一个随机数替换掉了:
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%”。
以上是关于我想将噪声应用于由3D numpy数组描绘的体积的主要内容,如果未能解决你的问题,请参考以下文章
Python:如何从 3D numpy/torch 数组中提取连接的组件(边界框)?