Beispiel #1
0
def get_fmt(array, high_pass=0.15):
    """
    Follows this algoritm:
        * FFT with centered frecuencies
        * convolucionar la magnitud con un filtro high pass
        * Logpolar
        * FFT with centered frecuencies
    """
    fourier = get_shifted_dft(array)
    magnitude = np.abs(fourier)
    high_passed = get_high_pass_filter(magnitude, high_pass, 0)
    logpolar = get_logpolar(high_passed, 3)
    fmt = get_shifted_dft(logpolar)
    return fmt
Beispiel #2
0
def get_initial_phase(hologram, wavelength=1):
    fringes = hologram / float(hologram.ptp())
    fringes = (fringes + fringes.min()) * 2 - 1
    image_dft = get_shifted_dft(fringes)
    cos_alpha, cos_beta = calculate_director_cosines(image_dft, wavelength, (1, 1))
    maxrow = fringes.shape[0]
    maxcol = fringes.shape[1]
    row, col = np.ogrid[:maxrow:1., :maxcol:1.]
    plane = cos_alpha * col + cos_beta * row

    def fitness((alpha, beta, offset)):
        alpha = (sigmoid(alpha) - 0.5) * 2 ** 2
        beta = (sigmoid(beta) - 0.5) * 2 ** 2
        offset = sigmoid(offset) * tau / 2
        correction = cos_alpha * col + cos_beta * row + offset
        sintetic_fringes = get_fringes(plane + correction, wavelength)
        score = np.sum(np.fabs(fringes - sintetic_fringes))
        print(alpha, beta, offset, score)
        return score
    alpha, beta, offset = generic_minimizer(fitness, [0, 0, 0])

    alpha = (sigmoid(alpha) - 0.5) * 2 ** 2
    beta = (sigmoid(beta) - 0.5) * 2 ** 2
    offset = sigmoid(offset) * tau / 2
    correction = alpha * col + beta * row + offset
    plane = plane + correction
    return plane
Beispiel #3
0
def get_initial_phase(hologram, wavelength=1):
    fringes = hologram / float(hologram.ptp())
    fringes = (fringes + fringes.min()) * 2 - 1
    image_dft = get_shifted_dft(fringes)
    cos_alpha, cos_beta = calculate_director_cosines(image_dft, wavelength,
                                                     (1, 1))
    maxrow = fringes.shape[0]
    maxcol = fringes.shape[1]
    row, col = np.ogrid[:maxrow:1., :maxcol:1.]
    plane = cos_alpha * col + cos_beta * row

    def fitness((alpha, beta, offset)):
        alpha = (sigmoid(alpha) - 0.5) * 2**2
        beta = (sigmoid(beta) - 0.5) * 2**2
        offset = sigmoid(offset) * tau / 2
        correction = cos_alpha * col + cos_beta * row + offset
        sintetic_fringes = get_fringes(plane + correction, wavelength)
        score = np.sum(np.fabs(fringes - sintetic_fringes))
        print(alpha, beta, offset, score)
        return score

    alpha, beta, offset = generic_minimizer(fitness, [0, 0, 0])

    alpha = (sigmoid(alpha) - 0.5) * 2**2
    beta = (sigmoid(beta) - 0.5) * 2**2
    offset = sigmoid(offset) * tau / 2
    correction = alpha * col + beta * row + offset
    plane = plane + correction
    return plane
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
def get_spectrum(rhologram, **kw):
    spectrum = get_shifted_dft(rhologram)
    return spectrum
Beispiel #7
0
 def spectrum(self):
     print("Spectrum (dft(hologram))")
     if self.use_refbeam:
         return get_shifted_dft(self.hologram)
     else:
         return self.ispectrum
Beispiel #8
0
 def ispectrum(self):
     print("DFT(image)")
     return get_shifted_dft(self.image)
Beispiel #9
0
def get_spectrum(rhologram, **kw):
    spectrum = get_shifted_dft(rhologram)
    return spectrum
Beispiel #10
0
 def spectrum(self):
     print("Spectrum (dft(hologram))")
     if self.use_refbeam:
         return get_shifted_dft(self.hologram)
     else:
         return self.ispectrum
Beispiel #11
0
 def ispectrum(self):
     print("DFT(image)")
     return get_shifted_dft(self.image)