Sometimes, it may be relevant to use a noise which is more relevant to the system under study. Here, we create a noise consisting of edges with random features according to some prior model.
%load_ext autoreload
%autoreload 2
%cd -q ../probe
import matplotlib
#matplotlib.rcParams.update({'font.size': 18, 'font.family': 'STIXGeneral', 'mathtext.fontset': 'stix'})
matplotlib.rcParams.update({'font.size': 18, 'text.usetex': True})
%matplotlib inline
%config InlineBackend.figure_format='retina'
import matplotlib.pyplot as plt
import numpy as np
np.set_printoptions(precision=2, suppress=True)
from SparseEdges import SparseEdges
mp = SparseEdges('https://raw.githubusercontent.com/bicv/SparseEdges/master/default_param.py')
mp.pe.N = 1024
mp.pe.N_image = 1
print( mp.pe.base_levels, mp.n_levels)
edgeslist = np.zeros((6, mp.pe.N, mp.pe.N_image))
edgeslist[0, :, :] = mp.pe.N_X * np.random.rand(mp.pe.N, mp.pe.N_image)
edgeslist[1, :, :] = mp.pe.N_X * np.random.rand(mp.pe.N, mp.pe.N_image)
edgeslist[2, :, :] = (np.pi* np.random.rand(mp.pe.N, mp.pe.N_image) ) % np.pi
#edgeslist[3, :, :] = mp.sf_0[np.random.randint(mp.sf_0.size, size=(pe.N, pe.N_image))] # best would be to have more high frequency components
edgeslist[3, :, :] = np.ceil(mp.pe.base_levels**(mp.n_levels*(np.random.rand(mp.pe.N, mp.pe.N_image))))/mp.pe.base_levels**(mp.n_levels)
edgeslist[4, :, :] = np.random.randn(mp.pe.N, mp.pe.N_image)
edgeslist[5, :, :] = 2*np.pi*np.random.rand(mp.pe.N, mp.pe.N_image)
print (edgeslist.shape)
image_rec = mp.reconstruct(edgeslist[:,:,0])
image_rec /= image_rec.std()
fig, a = mp.show_edges(np.empty((6,0)), image=image_rec, color='toto', show_phase=False) #
fig, a = mp.show_edges(edgeslist[:,:,0], image=image_rec, color='toto', show_phase=False) #
print (image_rec.min(), image_rec.max())
scales = 0.5 * (1- mp.pe.base_levels**(-mp.n_levels*(np.random.rand(mp.pe.N, mp.pe.N_image))))#/mp.pe.base_levels**(mp.n_levels)
plt.hist(scales)
mp.sf_0[np.random.randint(mp.sf_0.size, size=(4, 5))]
import matplotlib
#matplotlib.rcParams.update({'font.size': 18, 'font.family': 'STIXGeneral', 'mathtext.fontset': 'stix'})
matplotlib.rcParams.update({'font.size': 18, 'text.usetex': True})
%matplotlib inline
%config InlineBackend.figure_format='retina'
import matplotlib.pyplot as plt
mp.pe.N = 1024
mp.pe.N_image = 1
print (mp.pe.base_levels, mp.n_levels)
edgeslist = np.zeros((6, mp.pe.N, mp.pe.N_image))
edgeslist[0, :, :] = mp.pe.N_X * np.random.rand(mp.pe.N, mp.pe.N_image)
edgeslist[1, :, :] = mp.pe.N_X * np.random.rand(mp.pe.N, mp.pe.N_image)
edgeslist[2, :, :] = (np.pi* np.random.rand(mp.pe.N, mp.pe.N_image) ) % np.pi
#edgeslist[3, :, :] = mp.sf_0[np.random.randint(mp.sf_0.size, size=(pe.N, pe.N_image))] # best would be to have more high frequency components
edgeslist[3, :, :] = 0.5 * (1- mp.pe.base_levels**(-mp.n_levels*(np.random.rand(mp.pe.N, mp.pe.N_image))))
edgeslist[4, :, :] = np.random.randn(mp.pe.N, mp.pe.N_image)
edgeslist[5, :, :] = 2*np.pi*np.random.rand(mp.pe.N, mp.pe.N_image)
print (edgeslist.shape)
image_rec = mp.reconstruct(edgeslist[:,:,0])
image_rec /= image_rec.std()
fig, a = mp.show_edges(edgeslist[:,:,0], image=image_rec, color='toto', show_phase=False) #
print (image_rec.min(), image_rec.max())
%load_ext watermark
%watermark
%load_ext version_information
%version_information numpy, scipy, matplotlib, sympy
%cd -q ../notebooks