Skip to content

Image registration package for python

License

Notifications You must be signed in to change notification settings

cplab/pyreg

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyreg

Image registration package for python

Introduction

The goal of this image processing pipeline is to be able to efficiently process 3D light-sheet images of mouse brains with a set of cell bodies lit up via fluorescent tags from FisTRAP mice and immunohistochemically based.

Steps of the Image Processing pipeline

  1. preprocesing and quality control (destriping)
  2. stitching data for atlas alignment (terastitcher e.g. reference: https://github.com/abria/TeraStitcher/wiki/Demo-and-batch-scripts)
    • terastitcher --import --volin=/data/channel --volin_plugin="TiledXY|3Dseries" --imin_plugin="tiff3D" --imout_plugin="tiff3D" --ref1=1 --ref2=2 --ref3=3 --vxl1=1 --vxl2=1 --vxl3=1 --projout=xml_import
    • terastitcher --displcompute --projin="/data/channel/xml_import.xml"
    • terastitcher --displproj --projin="/data/channel/xml_displcomp.xml"
    • terastitcher --displthres --projin="/data/chanel/xml_displproj.xml" --projout="/data/channel/xml_displthres.xml" --threshold=0.7
    • terastitcher --placetiles --projin="data/channel/xml_displthres.xml" --projout="/data/channel/xml_placetiles.xml" --algorithm=MIPNCC
    • terastitcher --merge --projin="data/channel/xml_placetiles.xml" --volout="/data/channel" --imout_depth=16 --resolutions=012345
  3. registering to a standard mouse atlas The Allen CCF v3 or Enhanced and Unified Anatomical Labeling for a Common Mouse Brain Atlas
  4. visualization (Vaa3d, Imaris, Arivis 4D, and FuJI)
  5. segmenation and cell counting U-Net: deep learning for cell counting, detection, and morphometry

General stuff

Mounting the shared server as a normal drive on a linux machine. This line needs to be added the /etc/fstab file

sudo nano /etc/fstab

Then paste this line at the end

//quetzalcoatl.local/workspace/ /media/gray/quetzspace cifs user=gray,pass=lablab,file_mode=0777,dir_mode=0777,noperm 0 0

Read and write speed test for linux ssd, quetzalcoatl server, and window raid storage. Test was performed with this code:

import os
import timeit

data = dict()

def read_all(path):
    data.clear()
    for root, dirs, files in os.walk(path):
        for f in files:
            with open(os.path.join(root,f), "rb") as fh:
                data[(root.replace(path,''),f)] = fh.read()


def write(path):
    for (root,f),content in data.items():
        # print(path,root)
        os.makedirs(os.path.join(path,root),exist_ok=True)
        with open(os.path.join(path,root,f), 'wb') as fh:
            fh.write(content)


print(timeit.timeit(setup="from __main__ import read_all", stmt="read_all('/home/gray/Desktop/LOC00001/')",number=1))
print(timeit.timeit(setup="from __main__ import read_all", stmt="read_all('/media/gray/quetzspace/Yu Lab Brain Data/Raw Data/deconvolution_input/VW0/CHN00/LOC00001/')",number=1))
print(timeit.timeit(setup="from __main__ import read_all", stmt="read_all('/raid/docker_data/LOC00001/')",number=1))

print(timeit.timeit(setup="from __main__ import write", stmt="write('/home/gray/Desktop/LOC00001-copy/')",number=1))
print(timeit.timeit(setup="from __main__ import write", stmt="write('/media/gray/quetzspace/Yu Lab Brain Data/Raw Data/deconvolution_input/VW0/CHN00/LOC00001-copy')",number=1))
print(timeit.timeit(setup="from __main__ import write", stmt="write('/raid/docker_data/LOC00001-copy')",number=1))

Results of two runs

RUN 1
~read~
ssd - 3.722733586007962
server - 9.70251502499741
raid - 3.9086415830097394
~write~
ssd - 4.040428158012219
server - 12.09031660000619
raid - 46.34526721299335

RUN 2
~read~
ssd - 3.83814213599544
server - 9.04114085699257
raid - 3.9069085770024685
~write~
ssd - 4.039209708003909
server - 11.972381725994637
raid - 47.36286968400236

Install elastix on Ubuntu 20.04

  1. Download elastix from Github elastix repo.

    wget https://github.com/SuperElastix/elastix/releases/download/5.0.1/elastix-5.0.1-linux.tar.bz2
  2. Extract and move the desigired location.

     tar -xvf /elastix-5.0.1-linux.tar.bz2
     sudo mv  elastix-5.0.1-linux /usr/bin/
    
    
  3. Add the following to .bashrc file

     export PATH=/usr/bin/elastix-5.0.1-linux/bin:$PATH
     export LD_LIBRARY_PATH=/usr/bin/elastix-5.0.1-linux/lib:$LD_LIBRARY_PATH
    
  4. In a terminal window, test as follows.

     elastix --help
    

elastix version: 5.0.1

elastix registers a moving image to a fixed image. The registration-process is specified in the parameter file. --help, -h displays this message and exit --version output version information and exit --extended-version output extended version information and exit

Call elastix from the command line with mandatory arguments: -f fixed image -m moving image -out output directory -p parameter file, elastix handles 1 or more "-p"

Optional extra commands: -fMask mask for fixed image -mMask mask for moving image -t0 parameter file for initial transform -priority set the process priority to high, abovenormal, normal (default), belownormal, or idle (Windows only option) -threads set the maximum number of threads of elastix

The parameter-file must contain all the information necessary for elastix to run properly. That includes which metric to use, which optimizer, which transform, etc. It must also contain information specific for the metric, optimizer, transform, etc. For a usable parameter-file, see the website.

Need further help? Check the website http://elastix.isi.uu.nl, or mail elastix@bigr.nl.

About

Image registration package for python

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%