Skip to content

pol-maca/icg-imaging

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

icg-imaging

Supplementary data, Python code and images for the paper "Dual Color Imaging from a Single BF2-Azadipyrromethene Fluorophore Demonstrated in vivo for Lymph Node Identification" (Niamh Curtin, Dan Wu,Ronan Cahill, Anwesha Sarkar, Pól Mac Aonghusa, Sergiy Zhuk, Manuel Barberio, Mahdi Al-Taher, Jacques Marescaux, Michele Diana, Donal F. O’Shea)

Abstract

Dual emissions at ~700 and 800 nm have been achieved from a single NIR-AZA fluorophore 1 by establishing parameters in which it can exist in either its isolated molecular or aggregated states. Dual near infrared (NIR) fluorescence color lymph node (LN) mapping with 1 was achieved in a large-animal porcine model, with injection site, channels and nodes all detectable at both 700 and 800 nm using a preclinical open camera system. The fluorophore was also compatible with imaging using two clinical instruments for fluorescence guided surgery.

Links to the Paper

Link to ChemRxiv Preprint

Supplementary material for the paper is located in the folder SI_4_Paper. It contains four mp4 format videos containing the images used in the paper.

Code

  • This code was written and tested using Python 3.8. The Numpy, Matplotlib, Seaborn and PIL Python packages are required. *

The Python script read_solaris_ir.py contains all of the code necessary to read raw data files exported from the Perkins-Elmer Solaris imaging stack. The script reads NIR & RGB data sources and outputs Black & White NIT images plus Colour RGB images. The images are labelled sequentially as they are read from the raw data. By default the script will save all the images as PNG image files. It will also create the 3D image overlays shown in the paper. The 3D images take most time to compute - so if you do not require them you can comment out line 411:

    plot = make_plot(z, figsize=(15, 15), scale=255 * 257, 
                     wavelength=wl, terrain=underlay)
The Perkins-Elmer archive has a structure like:
root
|_ Project_1
    |_ Video_1
    :
    |_ Video_M
|
:
|_ Project_N
    |_ Video_1
    :
    |_ Video_X
    
The Project directories are named using the identifier that was entered into the camera when the 
project was created at the start of the session. In the example provided our projects were named
'spe_no1, spe_no2, ...' so we use 'spe_no' as the common search string for project directories. I 
realise this could be programmed more flexibly - but the objective is to get the data from the
archive - and this is simple and works :-)

The Video_X directories are where the image data are placed. A new Video_X is created every time 
the NIR wavelength is changed on the camera. 

The following variables (Lines 338 - 341) are hard-coded default locations and search terms so we can find the Solaris SVM and SVR files and save outputs. You should to edit them to suit your project.

    p_search_term = 'spe_no'  # We use a search term to navigate the raw data, you entered this when you created the project
    v_search_term = 'Video'   # Every time you reset the wavelength on the DSolaris stack a new Video XX directory is created under the project
    input_dir = 'input'       # The root folder where you put the raw data
    out_dir = 'output'        # Where you want the output to go - the script will use the same project/video subdirectory structurefrom the input folder

Since the images are sequentially numbered it's straightforward to use a utility like ffmpeg to stitch the images together into videos from the command line if you wish.

Input Data

The raw data is in the directory input. It is organised by test subject (spe no1, spe no2) each test subject has a number of ``Video nn``` subdirectories, one for each tim the wavelength on the Solaris stack was changed.

The data in spe no1/Video 5 comes from a reasonably short case and is useful as a test to check if the Python script is correctly configured.

The resulting video from processing input/spe no1/Video 5 with the Python script and then using ffmpeg to create an mp4 video is saved in output/spe no1/Video 5 as spe_no1_Video 5_fluorescence.mp4.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages