0

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

我的问题是双重的:

  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

然后我可以将我的体积乘以这个数组,但是它在维护感兴趣的对象方面做得不好。

我想知道我是否可以计算出一条曲线,并且取决于强度在曲线上的位置将定义如何实现噪声,但我很难想象这将如何工作。任何帮助将不胜感激。

4

1 回答 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) ** ksomek > 0或类似指数的东西np.exp(1 - 1 / (1 - numpyarray + eps))。您还可以有一些规则,例如“应用 10% 的噪声并根据强度缩放其他 90%”。

于 2018-10-17T14:38:18.203 回答