f_tensor = uPTI_array_stitched[:7]
mat_map = uPTI_array_stitched[7:]

# compute the physical properties from the scattering potential tensor
retardance_pr_p, azimuth_p, theta_p = wo.scattering_potential_tensor_to_3D_orientation_PN(
    f_tensor, material_type='positive', reg_ret_pr=reg_ret_pr)
retardance_pr_n, azimuth_n, theta_n = wo.scattering_potential_tensor_to_3D_orientation_PN(
    f_tensor, material_type='negative', reg_ret_pr=reg_ret_pr)
retardance_pr = np.array([retardance_pr_p, retardance_pr_n])
azimuth = np.array([azimuth_p, azimuth_n])
theta = np.array([theta_p, theta_n])

p_mat_map = wo.optic_sign_probability(mat_map, mat_map_thres=0.04)
phase = wo.phase_inc_correction(f_tensor[0], retardance_pr[0], theta[0])
phase_PT, absorption_PT, retardance_pr_PT = [
    wo.unit_conversion_from_scattering_potential_to_permittivity(
        SP_array, lambda_illu, n_media=n_media, imaging_mode='3D')
    for SP_array in [phase, f_tensor[1].copy(), retardance_pr]
]
retardance_pr_PT = np.array([((-1)**i) * wo.wavelet_softThreshold(
    ((-1)**i) * retardance_pr_PT[i], 'db8', 0.0002, level=1)
                             for i in range(2)])
orientation_continuity_map = wo.orientation_3D_continuity_map(
    azimuth[0],
    theta[0],
    psz_ps_ratio=z_step / ps,
    avg_px_size=10,
    reg_ret_pr=1e-1)
retardance_pr_PT *= orientation_continuity_map[np.newaxis, ...]

# save results to zarr array
writer = WaveorderWriter(output_path, hcs=False, hcs_meta=None, verbose=True)
Example #2
0
plt.show()

### Estimate principal retardance, orientation, inclination, and optic axis from the scattering potential tensor
retardance_pr, azimuth, theta, mat_map = setup.scattering_potential_tensor_to_3D_orientation(f_tensor, S_image_tm,\
                                                                                             material_type='unknown', reg_ret_pr = reg_ret_pr, itr=20, step_size=0.1, fast_gpu_mode=True)
plt.show()

# scaling to the physical properties of the material

# optic sign probability
p_mat_map = wo.optic_sign_probability(mat_map,mat_map_thres=0.1)

# absorption and phase
phase = wo.phase_inc_correction(f_tensor[0], retardance_pr[0], theta[0])
absorption = f_tensor[1].copy()
phase_nm, absorption_nm, retardance_pr_nm = [wo.unit_conversion_from_scattering_potential_to_permittivity(SP_array, lambda_illu, n_media=n_media, imaging_mode = img_mode)
                                             for img_mode, SP_array in zip(['2D', '2D', '2D-ret'],[phase, absorption, retardance_pr])]

# clean up GPU memory leftorver

import gc
import cupy as cp

gc.collect()
cp.get_default_memory_pool().free_all_blocks()

## Visualize reconstructed physical properties of simulated sample
### Phase, principal retardance, azimuth, inclination, and optic sign

abs_min = -0.5
abs_max = 0.5