-
Notifications
You must be signed in to change notification settings - Fork 0
/
create_artificial_data.py
59 lines (50 loc) · 1.66 KB
/
create_artificial_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# -*- coding: utf-8 -*-
# Author: Qi Wang, Ievgen Redko, Sylvain Takerkart
import numpy as np
from scipy.stats import multivariate_normal
nb_samples = 200
x_size, y_size = 50, 50
# activated zone
amplitudes = np.random.normal(5, 1, nb_samples)
signalN = 11
mean = 0
square_sig = 0.1
X = np.linspace(-0.5, 0.5, signalN)
Y = np.linspace(-0.5, 0.5, signalN)
X, Y = np.meshgrid(X, Y)
pos = np.empty(X.shape + (2, ))
pos[:, :, 0] = X
pos[:, :, 1] = Y
signal_matrix = np.empty((nb_samples, signalN, signalN))
for i in range(nb_samples):
mu = np.array([mean, mean])
Sigma = np.array([[square_sig, 0], [0, square_sig]])
F = multivariate_normal(mu, Sigma)
Z = F.pdf(pos)
Z = Z / Z.max() * amplitudes[i]
signal_matrix[i] = Z
# coordinates of the center of the activated zone
coors = []
for i in range(nb_samples):
t = 2 * np.pi * np.random.uniform(0, 1)
r = np.sqrt(np.random.uniform(0, 225))
coor = [r * np.cos(t), r * np.sin(t)]
coors.append(coor)
coors = np.vstack(coors)
coors += np.array([25, 25])
coors = coors.astype(int)
# images with signal and noise
noise_level = 0.1
noise_mean = 0
gap = int(np.floor(signalN / 2))
signals = signal_matrix
noisefrees = np.zeros([nb_samples, x_size, y_size])
patterns = np.zeros([nb_samples, x_size, y_size])
for sample_id in range(nb_samples):
loc = coors[sample_id]
noisefrees[sample_id][loc[0] - gap:loc[0] + gap + 1, loc[1] - gap:loc[1] + gap + 1] \
= signals[sample_id]
patterns[sample_id] = noisefrees[sample_id] + \
np.random.normal(noise_mean, noise_level,
(x_size, y_size))
np.save('/artificial_data.npy', patterns)