Exemplo n.º 1
0
def _func(i):

    wpu.print_blue("MESSAGE: loop " + str(i) + ": " + listOfDataFiles[i])

    img = dxchange.read_tiff(listOfDataFiles[i])

    darkMeanValue = np.mean(wpu.crop_matrix_at_indexes(img, idx4cropDark))

    #TODO xshi, need to add option of input one value

    img = img - darkMeanValue  # calculate and remove dark
    img = wpu.crop_matrix_at_indexes(img, idx4crop)

    pv = int(period_harm_Vert / (sourceDistanceV + zvec[i]) *
             (sourceDistanceV + np.min(zvec)))
    ph = int(period_harm_Horz / (sourceDistanceH + zvec[i]) *
             (sourceDistanceH + np.min(zvec)))

    if plotFourierImages:

        wgi.plot_harmonic_grid(img, [pv, ph], isFFT=False)

        plt.savefig('FFT_{:.0f}mm.png'.format(zvec[i] * 1e3))
        plt.show(block=False)
        plt.close()

        wgi.plot_harmonic_peak(img, [pv, ph], isFFT=False)

        plt.savefig('FFT_peaks_{:.0f}mm.png'.format(zvec[i] * 1e3))
        plt.show(block=False)
        plt.close()

    return wgi.visib_1st_harmonics(img, [pv, ph],
                                   searchRegion=searchRegion,
                                   unFilterSize=unFilterSize)
Exemplo n.º 2
0
def files_to_array(list_sample_files, list_ref_files, list_dark_files,
                   idx4crop=[0, -1, 0, -1]):

    img = wpu.crop_matrix_at_indexes(dxchange.read_tiff(list_sample_files[0]),
                                     idx4crop)

    (nlines, ncolums) = img.shape

    img_stack = np.zeros((len(list_sample_files), nlines, ncolums))
    ref_stack = img_stack*0.0

    dark_im = img_stack[0, :, :]*0.0

    for i in range(len(list_dark_files)):

        dark_im += wpu.crop_matrix_at_indexes(dxchange.read_tiff(list_dark_files[i]),
                                              idx4crop)

    for i in range(len(list_sample_files)):

        img_stack[i, :, :] = wpu.crop_matrix_at_indexes(dxchange.read_tiff(list_sample_files[i]),
                                                  idx4crop) - dark_im


        ref_stack[i, :, :] = wpu.crop_matrix_at_indexes(dxchange.read_tiff(list_ref_files[i]),
                                                        idx4crop) - dark_im

    return img_stack, ref_stack
Exemplo n.º 3
0
def files_to_array(list_sample_files,
                   list_ref_files,
                   list_dark_files,
                   idx4crop=[0, -1, 0, -1]):

    img = wpu.crop_matrix_at_indexes(dxchange.read_tiff(list_sample_files[0]),
                                     idx4crop)

    (nlines, ncolums) = img.shape

    img_stack = np.zeros((len(list_sample_files), nlines, ncolums))
    ref_stack = img_stack * 0.0

    dark_im = img_stack[0, :, :] * 0.0

    for i in range(len(list_dark_files)):

        dark_im += wpu.crop_matrix_at_indexes(
            dxchange.read_tiff(list_dark_files[i]), idx4crop)

    for i in range(len(list_sample_files)):

        img_stack[i, :, :] = wpu.crop_matrix_at_indexes(
            dxchange.read_tiff(list_sample_files[i]), idx4crop) - dark_im

        ref_stack[i, :, :] = wpu.crop_matrix_at_indexes(
            dxchange.read_tiff(list_ref_files[i]), idx4crop) - dark_im

    return img_stack, ref_stack
Exemplo n.º 4
0
def dpc_integration(dpc01,
                    dpc10,
                    pixelsize,
                    idx4crop=[0, -1, 0, -1],
                    plotErrorIntegration=False,
                    saveFileSuf=None,
                    shifthalfpixel=False,
                    method='FC'):
    '''
    TODO: Write Docstring

    Integration of DPC to obtain phase. Currently only supports
    Frankot Chellappa
    '''

    if idx4crop == '':

        vmin = wpu.mean_plus_n_sigma(dpc01**2 + dpc10**2, -3)
        vmax = wpu.mean_plus_n_sigma(dpc01**2 + dpc10**2, 3)

        _, idx = wpu.crop_graphic_image(dpc01**2 + dpc10**2,
                                        kargs4graph={
                                            'cmap': 'viridis',
                                            'vmin': vmin,
                                            'vmax': vmax
                                        })
    else:
        idx = idx4crop

    dpc01 = wpu.crop_matrix_at_indexes(dpc01, idx)
    dpc10 = wpu.crop_matrix_at_indexes(dpc10, idx)

    if method == 'FC':

        phase = wps.frankotchellappa(dpc01 * pixelsize[1],
                                     dpc10 * pixelsize[0],
                                     reflec_pad=True)
        phase = np.real(phase)

    else:
        wpu.print_red('ERROR: Unknown integration method: ' + method)

    if plotErrorIntegration:
        wps.error_integration(dpc01 * pixelsize[1],
                              dpc10 * pixelsize[0],
                              phase,
                              pixelsize,
                              errors=False,
                              shifthalfpixel=shifthalfpixel,
                              plot_flag=True)

        if saveFileSuf is not None:
            wpu.save_figs_with_idx(saveFileSuf)

    return phase
def _func(i):

    wpu.print_blue("MESSAGE: loop " + str(i) + ": " + \
                   listOfDataFiles[i])

    if idx == [0, -1, 0, -1]:
        img = dxchange.read_tiff(listOfDataFiles[i]) - dark_im
    else:
        img = wpu.crop_matrix_at_indexes(
            dxchange.read_tiff(listOfDataFiles[i]), idx) - dark_im

    pv, ph = period_harm_Vert, period_harm_Horz

    pv = int(period_harm_Vert / (sourceDistance + zvec[i] - zvec[0]) *
             sourceDistance)
    ph = int(period_harm_Horz / (sourceDistance + zvec[i] - zvec[0]) *
             sourceDistance)

    wgi.plot_harmonic_grid(img, [pv, ph], isFFT=False)

    plt.savefig('FFT_{:04.0f}_ms_'.format(tvec[i] * 1e3) +
                '{:04.0f}mm.png'.format(zvec[i] * 1e3))
    plt.show(block=False)
    plt.close()

    #    wgi.plot_harmonic_peak(img,
    #                           [pv, ph],
    #                           isFFT=False,
    #                           fname='FFT_peaks_{:04.0f}_ms_'.format(tvec[i]*1e3) +
    #                                   '{:04.0f}mm.png'.format(zvec[i]*1e3))
    #
    #
    #    plt.close()

    return wgi.visib_1st_harmonics(img, [pv, ph], searchRegion=10)
Exemplo n.º 6
0
def dpc_integration(dpc01, dpc10, pixelsize, idx4crop=[0, -1, 0, -1],
                    plotErrorIntegration=False,
                    saveFileSuf=None,
                    shifthalfpixel=False, method='FC'):
    '''
    TODO: Write Docstring

    Integration of DPC to obtain phase. Currently only supports
    Frankot Chellappa
    '''

    if idx4crop == '':

        vmin = wpu.mean_plus_n_sigma(dpc01**2+dpc10**2, -3)
        vmax = wpu.mean_plus_n_sigma(dpc01**2+dpc10**2, 3)
        _, idx = wpu.crop_graphic_image(dpc01**2+dpc10**2,
                                        kargs4graph={'cmap': 'viridis',
                                                     'vmin': vmin,
                                                     'vmax': vmax})
    else:
        idx = idx4crop

    dpc01 = wpu.crop_matrix_at_indexes(dpc01, idx)
    dpc10 = wpu.crop_matrix_at_indexes(dpc10, idx)

    if method == 'FC':

        phase = wps.frankotchellappa(dpc01*pixelsize[1],
                                     dpc10*pixelsize[0],
                                     reflec_pad=True)
        phase = np.real(phase)

    else:
        wpu.print_red('ERROR: Unknown integration method: ' + method)

    if plotErrorIntegration:
        wps.error_integration(dpc01*pixelsize[1],
                              dpc10*pixelsize[0],
                              phase, pixelsize, errors=False,
                              shifthalfpixel=shifthalfpixel, plot_flag=True)

        if saveFileSuf is not None:
            wpu.save_figs_with_idx(saveFileSuf)

    return phase
def _func(i):

    wpu.print_blue("MESSAGE: loop " + str(i) + ": " + \
                   listOfDataFiles[i])

    if idx == [0, -1, 0, -1]:
        img = dxchange.read_tiff(listOfDataFiles[i]) - dark_im
    else:
        img = wpu.crop_matrix_at_indexes(dxchange.read_tiff(listOfDataFiles[i]), idx) - dark_im


    pv, ph = period_harm_Vert, period_harm_Horz

    pv = int(period_harm_Vert/(sourceDistance + zvec[i]-zvec[0])*sourceDistance)
    ph = int(period_harm_Horz/(sourceDistance + zvec[i]-zvec[0])*sourceDistance)


    return wgi.visib_1st_harmonics(img, [pv, ph], searchRegion=10)
zvec = np.zeros(nfiles)
tvec = np.zeros(nfiles)

for i in range(nfiles):

    zvec[i] = float(listOfDataFiles[i].rsplit('mm')[0].split('_')[-1]) * 1e-3
    tvec[i] = tvec_labels[int(listOfDataFiles[i].rsplit('.')[0].split('_')[-1])
                          - 1]

# =============================================================================
# %% Crop
# =============================================================================

idx = [200, -200, 0, 2160]

img = wpu.crop_matrix_at_indexes(img, idx)

wpu.print_blue("MESSAGE: idx for cropping")
wpu.print_blue(idx)

if idx != [0, -1, 0, -1]:
    dark_im = wpu.crop_matrix_at_indexes(dark_im, idx)

    idx[1] = idx[0] + np.max([idx[1] - idx[0], idx[3] - idx[2]])

    idx[3] = idx[2] + np.max([idx[1] - idx[0], idx[3] - idx[2]])

# =============================================================================
# %% Plot Real Image
# =============================================================================
#
gratingPeriod = 4.8e-6  # in meters
# uncomment proper pattern period:
patternPeriod = gratingPeriod/np.sqrt(2.0)  # if half Pi grating
# patternPeriod = gratingPeriod/2.0  # if Pi grating

img = dxchange.read_tiff('../../data4wavepy_examples/Dialens/cb_halfpi_4p8um_distace110mm_sample.tif')
imgRef = dxchange.read_tiff('../../data4wavepy_examples/Dialens/cb_halfpi_4p8um_distace110mm_ref.tif')
darkImg = dxchange.read_tiff('../../data4wavepy_examples/Dialens/dark.tif')

img = img - darkImg
imgRef = imgRef - darkImg

# %% crop

img, idx4crop = wpu.crop_graphic_image(img)
imgRef = wpu.crop_matrix_at_indexes(imgRef, idx4crop)

# %% Find harmonic in the Fourier images

# calculate the theoretical position of the hamonics
period_harm_Vert_o = np.int(pixelsize[0]/patternPeriod*img.shape[0] /
                            (sourceDistance + distDet2sample)*sourceDistance)
period_harm_Hor_o = np.int(pixelsize[1]/patternPeriod*img.shape[1] /
                           (sourceDistance + distDet2sample)*sourceDistance)


# Obtain harmonic periods from images

wpu.print_blue('MESSAGE: Obtain harmonic 01 exprimentally')

(_,
Exemplo n.º 10
0
    xlabel=r'x [$\mu m$ ]',
    ylabel=r'y [$\mu m$ ]',
    extent=wpu.extent_func(img, pixelSize) * 1e6)

idx4crop = wpu.graphical_roi_idx(img,
                                 verbose=True,
                                 kargs4graph={
                                     'cmap': cmap,
                                     'vmin': colorlimit[0],
                                     'vmax': colorlimit[1]
                                 })

wpu.print_blue("MESSAGE: idx for cropping")
wpu.print_blue(idx4crop)

img = wpu.crop_matrix_at_indexes(img, idx4crop)

# =============================================================================
# %% Dark indexes
# =============================================================================

darkRegionSelctionFlag = easyqt.get_yes_or_no(
    'Do you want to select ' + 'region for dark calculation?\n' +
    'Press ESC to use [0, 100, 0, 100]')

if darkRegionSelctionFlag:

    idx4cropDark = wpu.graphical_roi_idx(img,
                                         verbose=True,
                                         kargs4graph={
                                             'cmap': cmap,
def main_terminal(data_dir,
                  zvec_from,
                  startDist,
                  step_z_scan,
                  image_per_point,
                  strideFile,
                  pixelSize=0.65e-6,
                  gratingPeriod=4.8e-6,
                  pattern='Diagonal',
                  sourceDistanceV=-1,
                  sourceDistanceH=32,
                  unFilterSize=1,
                  searchRegion=20,
                  idx4crop=[0, -1, 0, -1],
                  darkRegionSelctionFlag=True):
    '''
        *** all unit in [m]
        data_dir:       data folder path
        zvec_from:      distance type:
                        'Calculated'
                        'Tabled'
        startDist:      started distance postion
        step_z_scan:    step size
        image_per_point:    images number for every distance
        strideFile:     Stride (Use only every XX files)

        pixelSize:       Pixel Size
        gratingPeriod:   CB Grating Period
        pattern:         grating pattern
                        'Diagonal' or 'Edge']
        sourceDistanceV:    Distance to Source
                             in the VERTICAL [m]
        sourceDistanceH:    Distance to Source
                            in the Horizontal [m]
        unFilterSize:   Size for Uniform Filter [Pixels]
                        default_value  1
        searchRegion:   Size of Region for Searching
                        the Peak [in Pixels]
                        default_value=20
        idx4crop:       crop area
                        [low_y, high_y, low_x, high_x ]
        darkRegionSelctionFlag:     use dark region [0, 20, 0, 20]?

    '''
    wpu._mpl_settings_4_nice_graphs()

    # =============================================================================
    # %% Load Image
    # =============================================================================

    originalDir = os.getcwd()

    # samplefileName = easyqt.get_file_names("Choose one of the scan files")[0]

    # data_dir = samplefileName.rsplit('/', 1)[0]
    os.chdir(data_dir)

    try:
        os.mkdir(data_dir + '/output/')
    except:
        pass

    fname2save = data_dir + '/output/' + 'zscan'

    # wpu.print_blue('MESSAGE: Loading files ' +
    #                samplefileName.rsplit('_', 1)[0] + '*.tif')
    wpu.print_blue('MESSAGE: Loading files ' + data_dir + '/*.tif')

    # listOfDataFiles = glob.glob(samplefileName.rsplit('_', 2)[0] + '*.tif')
    listOfDataFiles = glob.glob(os.path.join(data_dir, '*.tif'))
    listOfDataFiles.sort()
    nfiles = len(listOfDataFiles)

    # zvec_from = easyqt.get_choice(message='z distances is calculated or from table?',
    #                               title='Title',
    #                               choices=['Calculated', 'Tabled'])

    # %%

    if zvec_from == 'Calculated':

        # startDist = easyqt.get_float('Starting distance scan [mm]',
        #                              title='Title',
        #                              default_value=20)*1e-3

        # step_z_scan = easyqt.get_float('Step size scan [mm]',
        #                                title='Title',
        #                                default_value=5)*1e-3

        # image_per_point = easyqt.get_int('Number of images by step',
        #                                  title='Title',
        #                                  default_value=1)

        zvec = np.linspace(
            startDist,
            startDist + step_z_scan * (nfiles / image_per_point - 1),
            int(nfiles / image_per_point))
        zvec = zvec.repeat(image_per_point)

        # strideFile = easyqt.get_int('Stride (Use only every XX files)',
        #                             title='Title',
        #                             default_value=1)
        listOfDataFiles = listOfDataFiles[0::strideFile]
        zvec = zvec[0::strideFile]
        print(zvec)
    elif zvec_from == 'Tabled':

        zvec = np.loadtxt(
            easyqt.get_file_names("Table with the z distance values in mm")
            [0]) * 1e-3
        step_z_scan = np.mean(np.diff(zvec))

    if step_z_scan > 0:
        pass
    else:
        listOfDataFiles = listOfDataFiles[::-1]
        zvec = zvec[::-1]

    img = dxchange.read_tiff(listOfDataFiles[0])

    # =============================================================================
    # %% Experimental parameters
    # =============================================================================

    # pixelSize = easyqt.get_float("Enter Pixel Size [um]",
    #                              title='Experimental Values',
    #                              default_value=.6500, decimals=5)*1e-6

    # gratingPeriod = easyqt.get_float("Enter CB Grating Period [um]",
    #                                  title='Experimental Values',
    #                                  default_value=4.8)*1e-6

    # pattern = easyqt.get_choice(message='Select CB Grating Pattern',
    #                             title='Title',
    #                             choices=['Diagonal', 'Edge'])
    # #                            choices=['Edge', 'Diagonal'])

    # sourceDistanceV = easyqt.get_float("Enter Distance to Source\n in the VERTICAL [m]",
    #                                    title='Experimental Values',
    #                                    default_value=-0.73)

    # sourceDistanceH = easyqt.get_float("Enter Distance to Source\n in the Horizontal [m]",
    #                                    title='Experimental Values',
    #                                    default_value=34.0)

    # unFilterSize = easyqt.get_int("Enter Size for Uniform Filter [Pixels]\n" +
    #                               "    (Enter 1 to NOT use the filter)",
    #                               title='Experimental Values',
    #                               default_value=1)

    # searchRegion = easyqt.get_int("Enter Size of Region for Searching\n the Peak [in Pixels]",
    #                               title='Experimental Values',
    #                               default_value=20)

    os.chdir(originalDir)

    # =============================================================================
    # %% Crop
    # =============================================================================

    idx4crop = [0, -1, 0, -1]

    # [colorlimit,
    #  cmap] = wpu.plot_slide_colorbar(img,
    #                                  title='SELECT COLOR SCALE,\n' +
    #                                  'Raw Image, No Crop',
    #                                  xlabel=r'x [$\mu m$ ]',
    #                                  ylabel=r'y [$\mu m$ ]',
    #                                  extent=wpu.extent_func(img,
    #                                                         pixelSize)*1e6)

    # idx4crop = wpu.graphical_roi_idx(img, verbose=True,
    #                                  kargs4graph={'cmap': cmap,
    #                                               'vmin': colorlimit[0],
    #                                               'vmax': colorlimit[1]})

    wpu.print_blue("MESSAGE: idx for cropping")
    wpu.print_blue(idx4crop)

    # =============================================================================
    # %% Dark indexes
    # =============================================================================

    # darkRegionSelctionFlag = easyqt.get_yes_or_no('Do you want to select ' +
    #                                               'region for dark calculation?\n' +
    #                                               'Press ESC to use [0, 20, 0, 20]')
    print(darkRegionSelctionFlag)
    if darkRegionSelctionFlag:

        idx4cropDark = wpu.graphical_roi_idx(img,
                                             verbose=True,
                                             kargs4graph={
                                                 'cmap': cmap,
                                                 'vmin': colorlimit[0],
                                                 'vmax': colorlimit[1]
                                             })
    else:
        idx4cropDark = [0, 20, 0, 20]

    # dark_im = dxchange.read_tiff(listOfDataFiles[0])*0.0 + avgDark

    img = wpu.crop_matrix_at_indexes(img, idx4crop)

    # ==============================================================================
    # %% Harmonic Periods
    # ==============================================================================

    if pattern == 'Diagonal':
        period_harm_Vert = np.int(
            np.sqrt(2) * pixelSize / gratingPeriod * img.shape[0])
        period_harm_Horz = np.int(
            np.sqrt(2) * pixelSize / gratingPeriod * img.shape[1])
    elif pattern == 'Edge':
        period_harm_Vert = np.int(2 * pixelSize / gratingPeriod * img.shape[0])
        period_harm_Horz = np.int(2 * pixelSize / gratingPeriod * img.shape[1])

    # Obtain harmonic periods from images

    (period_harm_Vert,
     _) = wgi.exp_harm_period(img, [period_harm_Vert, period_harm_Horz],
                              harmonic_ij=['1', '0'],
                              searchRegion=40,
                              isFFT=False,
                              verbose=True)

    (_, period_harm_Horz) = wgi.exp_harm_period(
        img, [period_harm_Vert, period_harm_Horz],
        harmonic_ij=['0', '1'],
        searchRegion=40,
        isFFT=False,
        verbose=True)

    wpu.log_this('Input folder: ' + data_dir, preffname=fname2save)
    wpu.log_this('\nNumber of files : ' + str(nfiles))
    wpu.log_this('Stride : ' + str(strideFile))
    print(zvec_from)
    wpu.log_this('Z distances is ' + zvec_from)

    if zvec_from == 'Calculated':
        wpu.log_this('Step zscan [mm] : {:.4g}'.format(step_z_scan * 1e3))
        wpu.log_this('Start point zscan [mm] : {:.4g}'.format(startDist * 1e3))

    wpu.log_this('Pixel Size [um] : {:.4g}'.format(pixelSize * 1e6))
    wpu.log_this('Grating Period [um] : {:.4g}'.format(gratingPeriod * 1e6))
    wpu.log_this('Grating Pattern : ' + pattern)
    wpu.log_this('Crop idxs : ' + str(idx4crop))
    wpu.log_this('Dark idxs : ' + str(idx4cropDark))

    wpu.log_this('Vertical Source Distance: ' + str(sourceDistanceV))
    wpu.log_this('Horizontal Source Distance: ' + str(sourceDistanceH))

    wpu.log_this('Uniform Filter Size : {:d}'.format(unFilterSize))

    wpu.log_this('Search Region : {:d}'.format(searchRegion))

    # =============================================================================
    # %% Calculate everything
    # =============================================================================

    # =============================================================================
    # %% multiprocessing
    # =============================================================================

    ncpus = cpu_count()

    wpu.print_blue("MESSAGE: %d cpu's available" % ncpus)

    tzero = time.time()

    p = Pool(ncpus - 2)

    indexes = range(len(listOfDataFiles))
    parameters = []

    for i in indexes:
        parameters.append([
            i, listOfDataFiles, zvec, idx4cropDark, idx4crop, period_harm_Vert,
            sourceDistanceV, period_harm_Horz, sourceDistanceH, searchRegion,
            unFilterSize
        ])

    res = p.map(_func, parameters)
    p.close()

    wpu.print_blue('MESSAGE: Time spent: {0:.3f} s'.format(time.time() -
                                                           tzero))
    '''
    res = []
    for i in range(len(listOfDataFiles)):
        res.append(_func(i))
    print(res)
    '''
    # =============================================================================
    # %% Sorting the data
    # =============================================================================

    contrastV = np.asarray([x[0] for x in res])
    contrastH = np.asarray([x[1] for x in res])

    p0 = np.asarray([x[2] for x in res])
    pv = np.asarray([x[3] for x in res])
    ph = np.asarray([x[4] for x in res])

    pattern_period_Vert_z = pixelSize / (pv[:, 0] - p0[:, 0]) * img.shape[0]
    pattern_period_Horz_z = pixelSize / (ph[:, 1] - p0[:, 1]) * img.shape[1]

    # =============================================================================
    # %% Save csv file
    # =============================================================================

    outputfname = wpu.get_unique_filename(fname2save, 'csv')

    wpu.save_csv_file(np.c_[zvec.T, contrastV.T, contrastH.T,
                            pattern_period_Vert_z.T, pattern_period_Horz_z.T],
                      outputfname,
                      headerList=[
                          'z [m]', 'Vert Contrast', 'Horz Contrast',
                          'Vert Period [m]', 'Horz Period [m]'
                      ])

    wpu.log_this('\nOutput file: ' + outputfname)

    # =============================================================================
    # %% Plot
    # =============================================================================

    # contrast vs z
    fig = plt.figure(figsize=(10, 7))
    plt.plot(zvec * 1e3, contrastV * 100, '-ko', label='Vert')
    plt.plot(zvec * 1e3, contrastH * 100, '-ro', label='Hor')
    plt.xlabel(r'Distance $z$  [mm]', fontsize=14)

    plt.ylabel(r'Visibility $\times$ 100 [%]', fontsize=14)
    plt.title('Visibility vs detector distance', fontsize=14, weight='bold')

    plt.legend(fontsize=14, loc=0)

    wpu.save_figs_with_idx(fname2save)
    plt.show(block=False)

    # =============================================================================
    # %% Plot Harmonic position and calculate source distance
    # =============================================================================
    from wavepytools.diag.coherence.fit_singleGratingCoherence_z_scan import fit_period_vs_z
    #xshi 20190719
    #from fit_singleGratingCoherence_z_scan import fit_period_vs_z
    (sourceDistance_from_fit_V,
     patternPeriodFromData_V) = fit_period_vs_z(zvec,
                                                pattern_period_Vert_z,
                                                contrastV,
                                                direction='Vertical',
                                                threshold=.002,
                                                fname4graphs=fname2save)

    (sourceDistance_from_fit_H,
     patternPeriodFromData_H) = fit_period_vs_z(zvec,
                                                pattern_period_Horz_z,
                                                contrastH,
                                                direction='Horizontal',
                                                threshold=0.0005,
                                                fname4graphs=fname2save)
Exemplo n.º 12
0
pixelsizeImg = stride * pixelsizeImg

sx_raw = np.array(f['displacement/displacement_x'])[::stride, ::stride]
sy_raw = np.array(f['displacement/displacement_y'])[::stride, ::stride]
error_raw = np.array(f['displacement/error'])[::stride, ::stride]

xVec_raw = np.array(f['displacement/xvec'])[::stride]
yVec_raw = np.array(f['displacement/yvec'])[::stride]

#==============================================================================
# %% Crop
#==============================================================================

idx4crop = wpu.graphical_roi_idx(np.sqrt(sx_raw**2 + sy_raw**2), verbose=True)

sx = wpu.crop_matrix_at_indexes(sx_raw, idx4crop)
sy = wpu.crop_matrix_at_indexes(sy_raw, idx4crop)
error = wpu.crop_matrix_at_indexes(error_raw, idx4crop)

xVec = wpu.realcoordvec(sx.shape[1], pixelsizeImg)
yVec = wpu.realcoordvec(sx.shape[0], pixelsizeImg)

xmatrix, ymatrix = np.meshgrid(xVec, yVec)

#==============================================================================
# %% Calculations of physical quantities
#==============================================================================

totalS = np.sqrt(sx**2 + sy**2)

# Differenctial Phase
Exemplo n.º 13
0
patternPeriod = gratingPeriod / np.sqrt(2.0)  # if half Pi grating
#patternPeriod = gratingPeriod/2.0  # if Pi grating

img = dxchange.read_tiff(
    'data_example_for_single_grating/cb4p8um_halfPi_8KeV_10s_img.tif')
imgRef = dxchange.read_tiff(
    'data_example_for_single_grating/cb4p8um_halfPi_8KeV_10s_ref.tif')
darkImg = dxchange.read_tiff('data_example_for_single_grating/10s_dark.tif')

img = img - darkImg
imgRef = imgRef - darkImg

# %% crop

img, idx4crop = wpu.crop_graphic_image(img)
imgRef = wpu.crop_matrix_at_indexes(imgRef, idx4crop)

# %% Find harmonic in the Fourier images

# calculate the theoretical position of the hamonics
period_harm_Vert_o = np.int(pixelsize[0] / patternPeriod * img.shape[0] /
                            (sourceDistance + distDet2sample) * sourceDistance)
period_harm_Hor_o = np.int(pixelsize[1] / patternPeriod * img.shape[1] /
                           (sourceDistance + distDet2sample) * sourceDistance)

# Obtain harmonic periods from images

wpu.print_blue('MESSAGE: Obtain harmonic 01 exprimentally')

(_, period_harm_Hor) = wgi.exp_harm_period(
    imgRef, [period_harm_Vert_o, period_harm_Hor_o], harmonic_ij=['0', '1'])
def main_single_gr_Talbot(img, imgRef,
                          phenergy, pixelsize, distDet2sample,
                          period_harm, saveFileSuf,
                          unwrapFlag=True,
                          plotFlag=True,
                          saveFigFlag=False):

    global inifname  # name of .ini file

    [period_harm_Vert, period_harm_Hor] = period_harm


    #    img, imgRef = wpu.align_two_images(img, imgRef)

    # Crop

    img_size_o = np.shape(img)

    # take index from ini file
    idx4crop = list(map(int, (wpu.get_from_ini_file(inifname, 'Parameters',
                                                    'Crop').split(','))))

    # Plot Real Image wiht default crop

    tmpImage = wpu.crop_matrix_at_indexes(img, idx4crop)

    plt.figure()
    plt.imshow(tmpImage,
               cmap='viridis',
               extent=wpu.extent_func(tmpImage, pixelsize)*1e6)
    plt.xlabel(r'$[\mu m]$')
    plt.ylabel(r'$[\mu m]$')
    plt.colorbar()

    plt.title('Raw Image with initial Crop', fontsize=18, weight='bold')

    plt.pause(.1)
    # ask if the crop need to be changed
    newCrop = easyqt.get_yes_or_no('New Crop?')

    if saveFigFlag and not newCrop:
        wpu.save_figs_with_idx(saveFileSuf + '_Talbot_image')
    plt.close(plt.gcf())

    if newCrop:

        [colorlimit,
         cmap] = wpu.plot_slide_colorbar(img,
                                         title='SELECT COLOR SCALE,\n' +
                                         'Raw Image, No Crop',
                                         xlabel=r'x [$\mu m$ ]',
                                         ylabel=r'y [$\mu m$ ]',
                                         extent=wpu.extent_func(img,
                                                                pixelsize)*1e6)

        idx4crop = wpu.graphical_roi_idx(img, verbose=True,
                                         kargs4graph={'cmap': cmap,
                                                      'vmin': colorlimit[0],
                                                      'vmax': colorlimit[1]})
        wpu.set_at_ini_file(inifname, 'Parameters', 'Crop',
                            '{}, {}, {}, {}'.format(idx4crop[0], idx4crop[1],
                                                    idx4crop[2], idx4crop[3]))

        img = wpu.crop_matrix_at_indexes(img, idx4crop)

        # Plot Real Image AFTER crop

        plt.imshow(img, cmap='viridis',
                   extent=wpu.extent_func(img, pixelsize)*1e6)
        plt.xlabel(r'$[\mu m]$')
        plt.ylabel(r'$[\mu m]$')
        plt.colorbar()
        plt.title('Raw Image with New Crop', fontsize=18, weight='bold')

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_Talbot_image')
        plt.show(block=True)

    else:
        img = tmpImage

    imgRef = wpu.crop_matrix_at_indexes(imgRef, idx4crop)

    # calculate harmonic position after crop

    period_harm_Vert = int(period_harm_Vert*(idx4crop[1] - idx4crop[0]) /
                           img_size_o[0])
    period_harm_Hor = int(period_harm_Hor*(idx4crop[3] - idx4crop[2]) /
                          img_size_o[1])

    # Obtain harmonic periods from images

    (period_harm_Vert,
     _) = wgi.exp_harm_period(img, [period_harm_Vert,
                                    period_harm_Hor],
                                    harmonic_ij=['1', '0'],
                                    searchRegion=20,
                                    isFFT=False, verbose=True)

    (_,
     period_harm_Horz) = wgi.exp_harm_period(img, [period_harm_Vert,
                                             period_harm_Hor],
                                             harmonic_ij=['0', '1'],
                                             searchRegion=20,
                                             isFFT=False, verbose=True)

    # Calculate everything

    harmPeriod = [period_harm_Vert, period_harm_Hor]

    [int00, int01, int10,
     darkField01, darkField10,
     phaseFFT_01,
     phaseFFT_10] = wgi.single_2Dgrating_analyses(img, imgRef,
                                                  harmonicPeriod=harmPeriod,
                                                  plotFlag=plotFlag,
                                                  unwrapFlag=unwrapFlag,
                                                  verbose=True)

    virtual_pixelsize = [0, 0]
    virtual_pixelsize[0] = pixelsize[0]*img.shape[0]/int00.shape[0]
    virtual_pixelsize[1] = pixelsize[1]*img.shape[1]/int00.shape[1]

    diffPhase01 = phaseFFT_01*virtual_pixelsize[1]/distDet2sample/hc*phenergy
    diffPhase10 = phaseFFT_10*virtual_pixelsize[0]/distDet2sample/hc*phenergy

    return [int00, int01, int10,
            darkField01, darkField10,
            diffPhase01, diffPhase10,
            virtual_pixelsize]
sx_raw = np.array(f['displacement/displacement_x'])
sy_raw = np.array(f['displacement/displacement_y'])
error_raw = np.array(f['displacement/error'])

xVec_raw =  np.array(f['displacement/xvec'])
yVec_raw =  np.array(f['displacement/yvec'])

#==============================================================================
# %% Crop
#==============================================================================

idx4crop = wpu.graphical_roi_idx(np.sqrt(sx_raw**2 + sy_raw**2), verbose=True)



sx = wpu.crop_matrix_at_indexes(sx_raw, idx4crop)
sy = wpu.crop_matrix_at_indexes(sy_raw, idx4crop)
error = wpu.crop_matrix_at_indexes(error_raw, idx4crop)


xVec = wpu.realcoordvec(sx.shape[1], pixelsizeImg)
yVec = wpu.realcoordvec(sx.shape[0], pixelsizeImg)

xmatrix, ymatrix = np.meshgrid(xVec, yVec)




#==============================================================================
# %% Calculations of physical quantities
#==============================================================================
Exemplo n.º 16
0
if kb_input.lower() == 'y':
    # Graphical Crop

    idx = wpu.graphical_roi_idx(image, verbose=True)

    print('New idx:')
    print(idx)

    ini_pars['crop'] = str('{0}, {1}, {2}, {3}'.format(idx[0], idx[1], idx[2], idx[3]))
    with open(inifname, 'w') as configfile:  # update values in the ini file
        config.write(configfile)




image = wpu.crop_matrix_at_indexes(image, idx)
image_ref = wpu.crop_matrix_at_indexes(image_ref, idx)


# %%
# =============================================================================
# Displacement
# =============================================================================

sx, sy, \
error, step = wps.speckleDisplacement(image, image_ref,
                                      halfsubwidth=halfsubwidth,
                                      halfTemplateSize=halfTemplateSize,
                                      subpixelResolution=subpixelResolution,
                                      npointsmax=npointsmax,
                                      ncores=ncores, taskPerCore=15,
Exemplo n.º 17
0
#image_ref = np.rot90(image_ref)

kb_input = input('\nGraphic Crop? [N/y] : ')
if kb_input.lower() == 'y':
    # Graphical Crop

    idx = wpu.graphical_roi_idx(image, verbose=True)

    print('New idx:')
    print(idx)

    ini_pars['crop'] = str('{0}, {1}, {2}, {3}'.format(idx[0], idx[1], idx[2], idx[3]))
    with open(inifname, 'w') as configfile:  # update values in the ini file
        config.write(configfile)

image = wpu.crop_matrix_at_indexes(image, idx)
image_ref = wpu.crop_matrix_at_indexes(image_ref, idx)


# %%
# =============================================================================
# Displacement
# =============================================================================

sx, sy, \
error, step = wps.speckleDisplacement(image, image_ref,
                                      halfsubwidth=halfsubwidth,
                                      halfTemplateSize=halfTemplateSize,
                                      subpixelResolution=subpixelResolution,
                                      npointsmax=npointsmax,
                                      ncores=ncores, taskPerCore=15,
Exemplo n.º 18
0
        exit(-1)

    thickness -= np.nanmin(thickness)
    saveFigFlag = True

    # %% Crop

    metrology_flag = False
    if metrology_flag:
        thickness_temp = np.copy(thickness)

        thickness_temp[np.isnan(thickness)] = 0.0

        idx4crop = wpu.graphical_roi_idx(thickness_temp * 1e6, verbose=True)

        thickness = wpu.crop_matrix_at_indexes(thickness, idx4crop)

        xx = wpu.crop_matrix_at_indexes(xx, idx4crop)
        yy = wpu.crop_matrix_at_indexes(yy, idx4crop)

        stride = thickness.shape[0] // 125

        if gui_mode:

            wpu.plot_profile(xx[::stride, ::stride] * 1e6,
                             yy[::stride, ::stride] * 1e6,
                             thickness[::stride, ::stride] * 1e6,
                             xlabel=r'$x$ [$\mu m$ ]',
                             ylabel=r'$y$ [$\mu m$ ]',
                             zlabel=r'$z$ [$\mu m$ ]',
                             arg4main={'cmap': 'Spectral_r'})