def get_int_var(masked_spectrum, distance, wavelength): propagation_array = get_propagation_array(masked_spectrum.shape, distance, wavelength) propagated = propagation_array * masked_spectrum reconstructed = get_shifted_idft(propagated) intensity = get_intensity(reconstructed) fitness = intensity.var() return fitness
def get_lowpass_var(masked_spectrum, distance): propagation_array = get_propagation_array(masked_spectrum.shape, distance) propagated = propagation_array * masked_spectrum lowpass_mask = get_lowpass_mask(propagated.shape, .4) propagated = lowpass_mask * propagated reconstructed = get_shifted_idft(propagated) intensity = get_intensity(reconstructed) fitness = intensity.var() return fitness
def phase_detection(masked_spectrum, distance): shape = masked_spectrum.shape shape_center = [dim / 2 for dim in shape] filtered_hologram = get_shifted_idft(masked_spectrum) focus_mask = get_mask(shape, np.ones(20), shape_center) focus_feature = filtered_hologram * focus_mask feature_spectrum = get_shifted_dft(focus_feature) propagation_array = get_propagation_array(shape, distance) propagated_spectrum = propagation_array * feature_spectrum propagated_hologram = get_shifted_idft(propagated_spectrum) radious = 50 separation = 400 window = np.ones(radious) spectrum2sensor = np.angle spectrum2sensor = np.abs spectrum2sensor = get_intensity spectrum2sensor = normalize left_center = shape_center[0], shape_center[1] - separation / 2 left_mask = get_mask(shape, window, left_center) # left_bundle = left_mask * propagated_spectrum left_bundle = left_mask * propagated_hologram left_sensor = spectrum2sensor(get_shifted_dft(left_bundle)) left_peak = get_circles(left_sensor, 1, 50)[0][1] right_center = shape_center[0], shape_center[1] + separation / 2 right_mask = get_mask(shape, window, right_center) right_bundle = right_mask * propagated_hologram right_sensor = spectrum2sensor(get_shifted_dft(right_bundle)) right_peak = get_circles(right_sensor, 1, 50)[0][1] # showimage(normalize(np.maximum(left_bundle, right_bundle))) # showimage(normalize(np.maximum(left_sensor, right_sensor))) distance = get_distance(left_peak, right_peak) fitness = distance return fitness
def reconstruct(propagated, **kw): reconstructed = get_shifted_idft(propagated) return reconstructed
return mask def get_lowpass_mask(shape, radius=0.2, softness=0): radius = round(min(shape) * radius) window = np.kaiser(radius, softness) mask = get_mask(shape, window) return mask @methods def get_var(masked_spectrum, distance, wavelength, (dx, dy)): propagation_array = get_propagation_array(masked_spectrum.shape, distance, wavelength, (dx, dy)) propagated = propagation_array * masked_spectrum reconstructed = get_shifted_idft(propagated) module = get_module(reconstructed) module_zone = get_best_contrast_zone(module) # showimage(normalize(module_zone)) fitness = module_zone.var() return fitness @methods def get_diff_var(masked_spectrum, distance, wavelength, (dx, dy)): fitness = get_var(masked_spectrum, distance, wavelength, (dx, dy)) fitness -= get_var(masked_spectrum, -distance, wavelength, (dx, dy)) return fitness @methods
def reconstructed(self): print("IDFT(Propagated)") return get_shifted_idft(self.propagated)