我的数组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
答案 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()
答案 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])