Как создать гауссовскую интенсивность распределения для ROI? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть массив A размером 64х64.Область ROI имеет интенсивность пикселей равную 100, если пиксели находятся внутри области интереса.Внешний показатель ROI равен нулю

import numpy as np

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

Я хочу изменить значение интенсивности внутри ROI на гауссово распределение со средним значением 100 и дисперсией 1. Как я могу это сделать?Я попробовал приведенный ниже код, но это не правильно, потому что np.random.normal для всего массива, а не ROI

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

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Область, которую вы умножаете 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])
1 голос
/ 27 марта 2019

попробуйте это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...