如何为ROI生成高斯分布强度?

时间:2019-03-27 16:39:02

标签: python python-3.x image-processing

我的数组A的大小为64x64。如果像素在ROI内,则ROI区域的像素强度为100。 ROI之外为零

import numpy as np

A= np.zeros((64,64))
A[16:48,26:48]=100

我想将内部ROI的强度值更改为高斯分布,平均值为100,方差为1。我该怎么做?我尝试了下面的代码,但是它是不正确的,因为整个数组而不是ROI都是np.random.normal

noise_value = np.random.normal(0, 1, size=A.shape)
A = A*noise_value + A

2 个答案:

答案 0 :(得分:1)

尝试一下:

import numpy as np
import matplotlib.pyplot as plt

def gaus(x, a, m, s):
    return np.sqrt(a)*np.exp(-(x-m)**2/(2*s**2))
    # if you want it normalized:
    #return 1/(np.sqrt(2*np.pi*s**2))*np.exp(-(x-m)**2/(2*s**2))                               

xx, yy = np.meshgrid(np.arange(100), np.arange(100))

gaus2d = gaus(xx, 100, 50, 10)*gaus(yy, 100, 50, 10)

plt.figure()
plt.imshow(gaus2d) 
plt.colorbar()

enter image description here

答案 1 :(得分:1)

您要乘以noise_value的区域必须与noise_value相同。试试:

A[16:48,26:48] = A[16:48,26:48] * noise_value + A[16:48,26:48]

此外,您的公式A = A * noise_value + A似乎与您描述的强度分布不匹配。如果是这样,您可能只是:

A = np.zeros((64,64))
A[16:48,26:48] = np.random.normal(100, 1, size=[32,22])