import numpy as np
    import Utility_Functions.file_io as fio
    import Utility_Functions.stack as stack
    from Visualisation.grid_img import viz_grid
    import pylab as plt
    import Registration.registration_new as registration
    from skimage.exposure import rescale_intensity

    import Unzipping.unzip as uzip
    import scipy.io as spio
    import os

    dataset_folder = '../../Data/Holly/czifile_test_tiff'
    out_view_aligned_folder = os.path.join(dataset_folder, 'view_aligned-t')
    fio.mkdir(out_view_aligned_folder)
    """
    Load dataset and pair up data. 
    """
    dataset_files = fio.load_dataset(
        dataset_folder, ext='.tif', split_key='_',
        split_position=3)  # load in the just aligned files.
    view_pair_files = fio.pair_views(dataset_files,
                                     ext='.tif',
                                     split_key='_',
                                     split_position=3,
                                     view_by=2)
    """
    Do Sift3D registration to align the sequence of paired views. 
    """
    processfiles = np.hstack(view_pair_files)
    return np.hstack([min_x, min_y, min_z, max_x, max_y, max_z])


if __name__ == "__main__":

    import numpy as np
    import Utility_Functions.file_io as fio
    import Utility_Functions.stack as stack
    from skimage.exposure import rescale_intensity

    import Unzipping.unzip as uzip
    import time

    infolder = '../../Data/Holly/czifile_test'
    outfolder = '../../Data/Holly/czifile_test_tiff'
    fio.mkdir(outfolder)
    datasets = fio.load_dataset(infolder,
                                ext='.czi',
                                split_position=3,
                                split_key='_')

    pad_num = 11

    for datafile in datasets[:]:

        t1 = time.time()
        im = fio.read_czifile(datafile)
        im = im[:, ::-1]
        """
        Rescale to uint8
        """
Beispiel #3
0
    import time
    import pylab as plt
    from tqdm import tqdm
    import scipy.io as spio
    import Utility_Functions.stack as stack

    #==============================================================================
    #     load in the dataset
    #==============================================================================

    dataset_folder = '/media/felix/Elements/Shankar LightSheet/Example Timelapse/test'
    """
    Create output folders.
    """
    out_pre_folder = os.path.join(dataset_folder, 'preprocess_full')
    fio.mkdir(out_pre_folder)
    #    out_pre_folder = os.path.join(dataset_folder, 'enhance_scaled'); fio.mkdir(out_pre_folder)
    #    out_aligned_folder = os.path.join(dataset_folder, 'aligned_full'); fio.mkdir(out_aligned_folder)
    out_aligned_folder = os.path.join(dataset_folder,
                                      'aligned_sift-enh-test-correct1')
    fio.mkdir(out_aligned_folder)
    #    out_aligned_folder2 = os.path.join(dataset_folder, 'aligned2_full'); fio.mkdir(out_aligned_folder2)
    #    out_flow_folder = os.path.join(dataset_folder, 'optflow_full'); fio.mkdir(out_flow_folder)
    #    out_track_folder = os.path.join(dataset_folder, 'tracks_full'); fio.mkdir(out_track_folder)

    ##==============================================================================
    ##   Preprocessing: Rescale and repad the frames in the dataset (for speed)
    ##==============================================================================
    #
    #    dataset_files = fio.load_dataset(dataset_folder, ext='.tif', split_position=1)
    ##    downsample_factor = 5
Beispiel #4
0
import Unzipping.unzip_backup as uzip
import numpy as np
import pylab as plt
from skimage.exposure import rescale_intensity, equalize_adapthist
import Geometry.transforms as tf
import Registration.registration_new as registration

# load in a set of files.
dataset_folder = '/media/felix/Elements/Shankar LightSheet/Example Timelapse/test'
out_aligned_folder = os.path.join(dataset_folder, 'aligned2')
dataset_files = fio.load_dataset(
    out_aligned_folder, ext='.tif', split_key='TP_',
    split_position=1)  # load in the just aligned files.

out_folder = 'test_non-rigid-registered'
fio.mkdir(out_folder)

from scipy.misc import imsave
from tqdm import tqdm
import Visualisation.volume_img as vol_img
import Geometry.meshtools as meshtools

# test the parametrization approach again? o
for i in tqdm(range(len(dataset_files))[1:-1]):

    reg_config = {'alpha': 0.1, 'levels': [8, 4, 2, 1], 'warps': [4, 2, 0, 0]}

    infile1 = dataset_files[1]  # pick one reference don't do sequential !.
    infile2 = dataset_files[i + 1]

    #    savefile='test_nonrigid.tif'
def register3D_SIFT_wrapper(dataset_files, in_folder, out_folder, reg_config):
    """
    Registers the similarity transformation exploiting the sift3D library.
    https://github.com/bbrister/SIFT3D
    
    returns transforms for each time point which subsequently applied to each image?  
    """
    import matlab.engine
    import scipy.io as spio
    import os
    import shutil
    import pylab as plt
    from tqdm import tqdm
    import time
    import pylab as plt
    import Visualisation.imshowpair as imshowpair
    from skimage.exposure import rescale_intensity

    #     start the python matlab engine.
    eng = matlab.engine.start_matlab()

    fio.mkdir(
        out_folder
    )  # check that the output folder exists, create if does not exist.

    print 'registration'

    if reg_config['mode'] == 1:
        tforms = []
        translate_matrixs = []

        datasetsave_files = np.hstack([
            dataset_files[2 * i + 1].replace(in_folder, out_folder)
            for i in range(len(dataset_files) // 2)
        ])

        for i in tqdm(range(len(dataset_files) // 2)):

            t1 = time.time()
            im1file = dataset_files[2 * i]
            im2file = dataset_files[2 * i + 1]

            print 'registering SIFT'
            tmatrix = eng.register3D_SIFT_wrapper(im1file, im2file,
                                                  datasetsave_files[i],
                                                  reg_config['downsample'],
                                                  reg_config['lib_path'],
                                                  reg_config['return_img'])
            tmatrix = np.asarray(tmatrix)
            tforms.append(tmatrix)
            print tmatrix
            """
            if matlab doesn't save matrix then we use python to do so.
            """
            if reg_config['return_img'] != 1:

                print 'reading image'
                im1 = fio.read_multiimg_PIL(im1file)
                im2 = fio.read_multiimg_PIL(im2file)

                print 'finished reading image'
                # restrict the tranformation to affine.
                affine = np.zeros((4, 4))
                affine[:-1, :] = tmatrix.copy()
                affine[-1] = np.array([0, 0, 0, 1])

                # decomposition to zero out scaling and shear (rigid transformation)
                T, R, Z, S = decompose44(affine)
                affine = compose(T, R, np.ones(3),
                                 np.zeros(3))  # no scaling, no shears.

                print 'affine matrix'
                print affine

                im2 = np.uint8(
                    tf.apply_affine_tform(im2.transpose(1, 2, 0), affine,
                                          np.array(im1.shape)[[1, 2, 0]]))
                im2 = im2.transpose(2, 0, 1)

                # realign and correct the translation artifact.
                im2, translate_matrix = align_centers(im1, im2)
                translate_matrixs.append(translate_matrix)

                print 'saving'
                fio.save_multipage_tiff(im2, datasetsave_files[i])

            t2 = time.time()

            print 'elapsed time: ', t2 - t1

    if reg_config['mode'] == 2:
        print 'running sequential registration'
        datasetsave_files = np.hstack(
            [f.replace(in_folder, out_folder) for f in dataset_files])
        translate_matrixs = []

        if reg_config['return_img'] == 1:
            tforms = eng.register3D_SIFT_wrapper_batch(
                dataset_files, datasetsave_files, reg_config['downsample'],
                reg_config['lib_path'], reg_config['mode'])
        else:
            print 'running python mode'
            tforms = []
            # set the fixed image.
            fixed = fio.read_multiimg_PIL(dataset_files[0])
            fio.save_multipage_tiff(fixed, datasetsave_files[0])

            fixed_file = datasetsave_files[0]
            for i in tqdm(range(len(dataset_files) - 1)):
                moving_file = dataset_files[i + 1]

                print 'registering SIFT'
                tmatrix = eng.register3D_SIFT_wrapper(fixed_file, moving_file,
                                                      datasetsave_files[i + 1],
                                                      reg_config['downsample'],
                                                      reg_config['lib_path'],
                                                      reg_config['return_img'])
                tmatrix = np.asarray(tmatrix)
                tforms.append(tmatrix)
                """
                Apply the transforms.
                """
                im1 = fio.read_multiimg_PIL(fixed_file)
                im2 = fio.read_multiimg_PIL(moving_file)

                affine = np.zeros((4, 4))
                affine[:-1, :] = tmatrix.copy()
                affine[-1] = np.array([0, 0, 0, 1])

                # decomposition
                T, R, Z, S = decompose44(affine)  # S is shear!
                affine = compose(T, R, np.ones(3), np.zeros(
                    3))  # constant scale, allow shear.(since there is wiggle?)

                print 'compose affine'
                print affine
                print 'applying transform'
                im2 = np.uint8(
                    tf.apply_affine_tform(im2.transpose(1, 2, 0), affine,
                                          np.array(im1.shape)[[1, 2, 0]]))
                im2 = im2.transpose(2, 0, 1)

                # realign and correct the translation artifact.
                print 'realigning centers'
                im2, translate_matrix = align_centers(im1, im2)
                translate_matrixs.append(translate_matrix)
                #                translate_matrixs.append(affine)

                fio.save_multipage_tiff(im2, datasetsave_files[i + 1])

                comb = imshowpair.checkerboard_imgs(im1[:, 1000],
                                                    im2[:, 1000],
                                                    grid=(10, 10))

                plt.figure()
                plt.imshow(rescale_intensity(comb / 255.))
                plt.show()

                # update the savefile.
                fixed_file = datasetsave_files[i + 1]

    tforms = np.array(tforms)
    translate_matrixs = np.array(translate_matrixs)

    spio.savemat(
        os.path.join(out_folder, 'tforms_view_align.mat'), {
            'files': dataset_files,
            'config': reg_config,
            'view_tforms': tforms,
            'translate_tforms': translate_matrixs
        })
    """
    Stop the matlab engine? to prevent hangups. 
    """
    #    eng.quit()

    return (tforms, translate_matrixs)