Example #1
0
    def generate_A0ft_svd_list(self):
        A0ft_list = EM.unshifted_basis_ft_svd_list(self.var_theta,
									                               self.var_rad,
									                               self.dtheta,
									                               self.drad,
									                               self.num_theta,
									                               self.num_rad)
        return A0ft_list
Example #2
0
def generate_A0_stack(ringModel):
    A0_stack = EM.unshifted_basis_matrix_stack(ringModel.var_theta,
							                               ringModel.var_rad,
							                               ringModel.dtheta,
							                               ringModel.drad,
							                               ringModel.num_theta,
							                               ringModel.num_rad)
    return A0_stack
Example #3
0
        B_rad_dx = np.empty(0)
        B_rad_dy = np.empty(0)
        B_rad_var  = np.empty(0)
        
        for i_az, az in enumerate(az_means):       
            print(i_az)
            x_radii, y_radii = RingIP.line_normal_to_ellipse(az_x0[i_az],
                                                             az_y0[i_az],
                                                             rsf.a,rsf.b,
                                                             rad_distances)
            dx = az_x0[i_az] - x_radii.ravel()
            dy = az_y0[i_az] - y_radii.ravel()
            for j in range(len(dx)):
                for rad_var in rad_variance_domain:
                    B0 = EM.ellipse_basis_single_spot([x_mask,y_mask],rsf.a,rsf.b,
                                                 rsf.xc,rsf.zc,dx[j],dy[j],
                                                 az,num_theta,rad_var,
                                                 az_variances[i_az])
                    B = np.hstack([B,B0[:,None]])
                    B_az_mean = np.append(B_az_mean,az)
                    B_az_var  = np.append(B_az_var,az_variances[i_az])
                    B_rad_dx = np.append(B_rad_dx,dx[j])
                    B_rad_dy = np.append(B_rad_dy,dy[j])
                    B_rad_var  = np.append(B_rad_var,rad_var)

        #wsqanp.save(os.path.join(name,'full_ellipse_basis.npy'),B)
        # might need to adjust the units of az (azimuthal mean)                                         
                                         
        # Construct 2d elliptic basis matrix based on 1d fit and define the
        # basis path. Only `
        
        # Try and make it stored as a sparse matrix? How can I tell if this
num_rad = 2 * dr

num_var_t = 15
num_var_r = 10

dtheta = 2 * np.pi / num_theta
drad = 1

var_theta = np.linspace((dtheta), (np.pi / 32), num_var_t)**2
var_rad = np.linspace(drad, 3, num_var_r)**2

# Compute basis matrix and interpolate ring to polar coordinates
ringModel = RM.RingModel(load_step, img_nums[0], radius - dr, radius + dr,
                         num_theta, num_rad, dtheta, drad, var_theta, var_rad)
A0ft_stack = EM.unshifted_basis_matrix_ft_stack(
    ringModel.var_theta, ringModel.var_rad, ringModel.dtheta, ringModel.drad,
    ringModel.num_theta, ringModel.num_rad)

ringModel.l1_ratio = 1
ringModel.max_iters = 500
ringModel.lipschitz = 6e5

out_path = os.path.join('..', 'CHESS_results', 'ringModel_out')

ringModel_list = []
for img_num in img_nums:
    img_file = 'polar_image_al7075_load_' + str(load_step) + '_img_' + str(
        img_num) + '.npy'
    img_path = os.path.join('..', 'CHESS_data', img_file)
    ringModel = RM.RingModel(load_step, img_num, radius - dr, radius + dr,
                             num_theta, num_rad, dtheta, drad, var_theta,
Example #5
0
r_coord = np.transpose(r_coord)

theta_coord = theta.copy()
for i in range(num_r - 1):
    theta_coord = np.vstack((theta_coord, theta))

#%% Stack up a bunch of test images shiftes in theta using 2D gaussian basis
m_r = num_r / 2
m_theta = np.linspace(0, num_theta, num_r)
v_r = num_r / 2
v_theta = num_theta / 2
images = np.zeros((num_theta, 0))
for j in range(num_r):
    dr = 1
    dtheta = 1
    B = EM.gaussian_basis_wrap_2D(num_theta, dtheta, m_theta[j], v_theta,
                                  num_r, dr, m_r, v_r)
    img = B.reshape((num_theta, num_r))
    images = np.append(images, img, 1)
plt.imshow(images)

#%% Test 2D convolution to generate 2D shifted Gaussian basis functions
num_r = 500
num_theta = 500
v_r = num_r / 2
v_theta = num_theta / 2
m_r = 0
m_theta = 0
dr = 1
dtheta = 1
B0 = EM.gaussian_basis_wrap_2D(num_theta, dtheta, m_theta, v_theta, num_r, dr,
                               m_r, v_r).reshape((num_theta, num_r))
num_var_t = 6
num_var_r = 5

dtheta = 2 * np.pi / num_theta
drad = 1

var_theta = np.linspace((dtheta), (np.pi / 32), num_var_t)**2
var_rad = np.linspace(drad, 3, num_var_r)**2

# Initialize Ring Model
ringModel = RM.RingModel(load_step, img_num, radius - dr, radius + dr,
                         num_theta, num_rad, dtheta, drad, var_theta, var_rad)

# Compute basis matrix and interpolate ring to polar coordinates
A0_stack = EM.unshifted_basis_matrix_stack(ringModel.var_theta,
                                           ringModel.var_rad, ringModel.dtheta,
                                           ringModel.drad, ringModel.num_theta,
                                           ringModel.num_rad)

#A0ft_svd_list = ringModel.generate_basis_matrices()

ringModel.l1_ratio = 1
ringModel.max_iters = 500
ringModel.compute_lipschitz(A0_stack)

synth_image_list = []
for j in range(3):
    synth_image = np.zeros((num_rad, num_theta))
    for i in range(5):
        rand_t = random.randint(0, num_var_t - 1)
        rand_r = random.randint(0, num_var_r - 1)
        rand_theta = random.randint(0, num_theta - 1)
dtheta = 2*np.pi/num_theta

dr = 30
num_rad = 2*dr
drad = 1

# Create fitting matrix 
reload(EM)
reload(LassoSolvers)
num_var_t = 15
num_var_r = 10
var_theta = np.linspace((dtheta),(np.pi/16),num_var_t)**2
var_rad   = np.linspace(drad,10,num_var_r)**2
                       
#Store stack of image slices
B0ft_stack    = EM.unshifted_basis_matrix_stack(var_theta,var_rad,dtheta,drad,num_theta,num_rad) 
B0ft_list     = EM.unshifted_basis_matrix_list(var_theta,var_rad,dtheta,drad,num_theta,num_rad)
B0ft_list_svd = EM.unshifted_basis_svd_list(var_theta,var_rad,dtheta,drad,num_theta,num_rad)


x = np.random.rand(num_rad,num_theta,num_var_t,num_var_r)
R = np.random.rand(num_rad,num_theta)
AtR_conv_para = np.zeros((num_rad,num_theta,num_var_t,num_var_r))
AtR_conv_para_svd = np.zeros((num_rad,num_theta,num_var_t,num_var_r))
     
# Convolution
a = time.time()
AtR_conv = CO.AtR_ft_2D(B0ft_stack,R)
timeAtR = time.time() - a

a = time.time()
num_theta = 250
dtheta = 2*np.pi/num_theta

scale = [200, 400, 330]
means = [40, 140, 200]
stds = [5, 10, 7]

np.random.normal(0,1,num_theta)

noise = np.random.normal(0,1,num_theta)
signal = np.zeros(num_theta)

for i in range(3):
    signal += scale[i]*EM.gaussian_basis_wrap(num_theta,
                                           dtheta,
                                           means[i],
                                           (stds[i]*dtheta)**2)

#%% Create Dictionary
num_var = 15

# Local maxima
maxima = argrelmax(signal)[0]

# Variances
test_vars = np.linspace((dtheta),(np.pi/16),num_var)**2
variances = test_vars

B = np.empty([num_theta,0])
B0 = np.empty([num_theta,0])
B0_tran = np.zeros([num_theta,num_var])
reload(EM)
num_var_t = 15
num_var_r = 10
var_theta = np.linspace((dtheta), (np.pi / 32), num_var_t)**2
var_rad = np.linspace(drad, 3, num_var_r)**2

# Generate unshifted basis function for each variance combination

#Store stack of image slices
B0_stack = np.zeros((num_rad, num_theta, num_var_t, num_var_r))
for t in range(num_var_t):
    for r in range(num_var_r):
        m_r = 0
        m_theta = 0
        B0 = EM.gaussian_basis_wrap_2D(num_theta, dtheta, m_theta,
                                       var_theta[t], num_rad, drad, m_r,
                                       var_rad[r]).reshape(
                                           (num_rad, num_theta))
        B0_stack[:, :, t, r] = B0

B0_stack_ft = np.zeros(B0_stack.shape)
for tv in range(num_var_t):
    for rv in range(num_var_r):
        B0_stack_ft[:, :, tv, rv] = np.fft.fft2(B0_stack[:, :, tv, rv])

# Fit 2D data
l1_ratio = 1
max_iters = 500

#plt.figure(1)
#plt.imshow(8000*B0_stack[:,:,12,9],cmap='jet', interpolation='nearest',vmin=0,vmax=200)
#%% Plot fit but try to remove DC component

plt.figure(1)
plt.ylabel('Intensity')
plt.xlabel('Angle (Radians)')

plt.plot(rsf_ex.theta, rsf_ex.f, 'bo-')

# Construct B
dom = np.arange(len(rsf_ex.coefs))
keep = dom[np.abs(rsf_ex.coefs) > 0]
full_fit = np.zeros(len(rsf_ex.theta))

for i in keep:
    if (rsf_ex.coefs[i] < 10):
        basis = EM.gaussian_basis_wrap(len(rsf_ex.f), dtheta, rsf_ex.means[i],
                                       rsf_ex.variances[i])
        plt.figure(1)
        plt.plot(rsf_ex.theta, rsf_ex.coefs[i] * basis, 'r-')

        full_fit += rsf_ex.coefs[i] * basis
plt.plot(rsf_ex.theta, full_fit, 'g-')

#%% View an individual histogram and fit plots
num_theta = 2400
dtheta = 2 * np.pi / num_theta
num_bins = 30

img_num = 13
load_steps = [0, 4]
bar_colors = ['r', 'b', 'g', 'm', 'k']
#%% Generate Data

num_theta = 250
dtheta = 2*np.pi/num_theta

scale = [200, 400, 330]
means = [40, 140, 200]


np.random.normal(0,1,num_theta)

noise = np.random.normal(0,1,num_theta)
signal = 0

i = 1
signal += EM.gaussian_basis_wrap(num_theta,dtheta,0,(10*dtheta)**2)

coefs = np.zeros((num_theta))

for i in range(3):
    coefs[means[i]] = scale[i]



import cython_test as ct

a_fft = np.fft.fft(signal)    
b_fft = np.fft.fft(coefs)

# Convolution via cython and blas
t = time.time()
radius = 370

num_theta = 2048
num_rad = 2 * dr

num_var_t = 15
num_var_r = 10

dtheta = 2 * np.pi / num_theta
drad = 1

var_theta = np.linspace((dtheta), (np.pi / 32), num_var_t)**2
var_rad = np.linspace(drad, 3, num_var_r)**2

# Compute basis matrix and interpolate ring to polar coordinates
A0_stack = EM.unshifted_basis_matrix_stack(var_theta, var_rad, dtheta, drad,
                                           num_theta, num_rad)
#%% Test individual operations
reload(CO)
a = time.time()
np.fft.fft2(A0_stack[:, :, 0, 0])

#CO.AtR_ft_2D(A0_stack, A0_stack[:,:,0,0])
print(time.time() - a)

#%% Test Algorithm
a = time.time()
CO.Ax_ft_2D(A0_stack, A0_stack)
#LassoSolvers.fista_circulant_2D(A0_stack, np.sum(np.sum(A0#_stack,2),2), 6e5, 1, 5, eps=10**(-7), positive=1, verbose=1, #benchmark=1)
print(time.time() - a)

#np.save('ringModels_synth.npy',ringModels_synth)
Example #13
0
#%% Lasso fitting for each ring
num_var = 15

# Extract local maxima
maxima = argrelmax(b)[0]

# Create Gaussian basis function fitting matrix
test_vars = np.linspace((dtheta), (np.pi / 16), num_var)**2
variances = test_vars

B = np.empty([num_theta, 0])
B0 = np.empty([num_theta, 0])
B0_tran = np.zeros([num_theta, num_var])

for i, var in enumerate(variances):
    basis_vec = EM.gaussian_basis_wrap(num_theta, dtheta, 0, var)
    B0 = np.hstack([B0, basis_vec[:, None]])
    for shift in maxima:
        B_shift = np.concatenate([basis_vec[-shift:], basis_vec[0:-shift]])
        B = np.hstack([B, B_shift[:, None]])

B_tran = np.transpose(B)

for i, var in enumerate(variances):
    B0_tran[0, i] = B0[0, i]
    B0_tran[1::, i] = np.flipud(B0[1::, i])

B = np.array(B, order='F', copy=True)
B_tran = np.array(B_tran, order='F', copy=True)
B0 = np.array(B0, order='F', copy=True)
B0_tran = np.array(B0_tran, order='F', copy=True)