Metadata-Version: 2.1
Name: PyOCT
Version: 3.0.0
Summary: Optical imaging reconstruction for both spectral-domain OCT and off-axis digital holography microscopy
Home-page: https://github.com/NeversayEverLin/PyOCT
Author: Yuechuan Lin
Author-email: linyuechuan1989@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE.txt

# Optical imaging reconstruction for both spectral-domain OCT and off-axis digital holography microscopy
PyOCT is developed to conduct normal spectral-domain optical coherence tomography (SD-OCT) imaging reconstruction with main steps as:
1. Reading Data
2. Background Subtraction 
3. Spectral Resampling 
3. Comutational Aberration Correction (Alpha-correction)
4. Camera Dispersion Correction (Beta-correction with camera calibration factors) 
5. Inverse Fourier Transform 
6. Obtain OCT Image

For off-axis digital holography microscopy (DHM) reconstruction, importing HoloLib from PyOCT and using class of QPImage(). 

PyOCT only supports python 3.0+. 

## Quick start
PyOCT can be install using pip:

    $pip install PyOCT


If you want to run the latest version of the code, you can install from git:

    $python -m pip install -U git+git://github.com/NeversayEverLin/PyOCT.git


After successful installaiton, you can test program under python environment:

    $from PyOCT import VolumeReconstruction
    $VolumeReconstruction.Run_test() 

To run the OCT imaging reconstruction, you can construct class OCTImagingProcessing() from PyOCTRecon module:

    $from PyOCT import PyOCTRecon 
    $OCTImage = PyOCTRecon.OCTImagingProcessing()  

Class OCTImagingProcessing require at least 3 positional arguments. All input parameters are:

* *root_dir*: required, root directory path where OCT raw data located, ENDING WITHOUT /; e.g.,  root_dir = 'D:/cuda_practice/OCT_Recon/OCTdata'.
* *SampleData*: optional, sample data, most of time won't need.
* *Settings*: optional, Settings, most time won't need.
* *sampleID*: required, sample data file name. ENDING WITHOUT _raw.bin; e.g., sampleID = 'OCT_100mV_2'. 
* *bkgndID*: required, background data file name, ending with _raw.bin; e.g., bkgndID = 'bkgnd_512_0_raw.bin'.
* *Sample_sub_path*: optional, default as None; sub-directory where OCT raw data located. ENDING WITHOUT /. 
* *Bkgnd_sub_path*: optional, default as None; sub-directory where OCT bkgnd data located. ENDING WITHOUT /.
* *saveOption*: optional, bool, default as False. 
* *saveFolder*: optional, name for folder to save data; default as None, which will save data in root directory.
* *RorC*: optional,"real" or "complex", tell to save data or show data in complex format or single precison (float32) format. 
* *verbose*: optional, bool, default as True. If True, the data processing will show processing information during each step. 
* *frames*: optional, int, number of frames to read and process, defaults as 1.
* *alpha2*, *alpha3*: optional, parameters for computational dispersion correction. 
* *depths*: optional, nuumpy.linspace() created array, depths to be processed, default as: np.linspace(1024,2047,1024), indicating procesing 1024th z-pixel to 2048-pixel.
* *gamma*: optional, power factor to do plotting, default as 0.4.
* *wavelength*: optional, nominal central wavelength of OCT laser source in unit of nm, default as 1300. 
* *XYConversion*: optional, 2 elements numpy array, calibration factor for galvo-scanning voltage to scanning field of view in x and y axis at unit of um/V, default as [660,660].
* *camera_matrix*: optional, camera dispersion correction factor, numpy array as [c0,c1,c2,c3]; default as np.asarray([1.169980E3,1.310930E-1,-3.823410E-6,-7.178150E-10]) for 1300nm system.
* *start_frame*: which frame to start reading and being processed. default is 1, indicating starting from first frame. 
* *OptimizingDC*: [Required Further Developement] optional, bool, optimizing dispersion correction to search optimized alpha2 and alpha3. default as False. 
* *singlePrecision*: only workable when RorC = 'real', Default as True, data will be converted into numpy.float32 single precision data type.
* *ReconstructionMethods*: 'cao' or 'nocao', default as 'NoCAO'. using bkgnd data as real time background estimation from signal dataset ("CAO") or directly from bkgnd file ("NoCAO")

Another class in PyOCT is *Batch_OCTProcessing()*, which using data processing provided by class OCTImagingProcessing() with additional inputs as:
* *Ascans*: number of Ascans.
* *Frames*: number of frames.
* *ChunkSize*: number of frames at each sub-segmentation dataset.

Batch_OCTProcessing() should be used when dataset is too large to be directly processed by whole volume which might exhaust your RAM/CPU. It will automatically segmented dataset into sub-segmentation dataset to be processed. The processed volume data and settings could be accessed by Batch_OCTProcessing.data or Batch_OCTProcessing.OCTData and Batch_OCTProcessing.Settings. You can still access to basic OCTImagingProcessing methods by accessing to methods like Batch_OCTProcessing.OCTRe.ShowXZ().

Class OCTImagingProcessing also provides several accesses/members to imaging processing data:

* *self.root_dir*: root directory of data set
* *self.sampleID*: sample ID
* *self.bkgndID*: background ID
* *self.Settings*: parameters of settings of reconstruction 
* *self.OCTData*: single precision OCT intensity data 
* *self.data*: complex OCT reconstruction data, only accessible when datatype is not "real".
* *self.InterferencePattern*: interference fringes of OCT imaging
* *self.DepthProfile*: depth profile (along z-axis) of reconstructed image
* *self.ShowXZ(OCTData)*: member function to show cross-section. 

DHM image reconstruction:
This class implements various tasks for quantitative phase imaging, including phase unwrapping, background correction,numerical focusing, and data export.
Parameters:
* *data*: 2d ndarray (float or complex) or list, The experimental data (see which_data). If data is a file .mat or .h5 or .hdf5, it will automatically load data where the keyword is given by data_key or automatically search for "IMG" or "data". 
* *data_key*: the key for accessing data array if "data" is defined as a file format; Default is None, then it will iterates automaticaly through the data file and get the first keys of either "data" or "IMG" 
* *ref_data*: reference image. could be (X,Y) or (T,X,Y) 
* *meta_data*: dict, Meta data associated with the input data.
* *holo_kw*: dict,Special keyword arguments for phase retrieval from hologram data.default: {"batchSize":50,"cr":0.5,"trans":False onlyCPU":False, "verbose":verbose,"zero_pad":True,subtract_mean":True, "returnContrastMat":True} 
    batchSize: the batch size to divide raw data into small batches in case overflowing memory. If overmemory happens, reduce the batchSize.
    cr: proportion of image to be counted when calculating interference contrast. 
    trans: transpose the raw data. usually to make it identical dimension to MATLAB
    onlyCPU: only using CPU. If False, it will choose GPU computation resource. 
    verbose: show intermediate results. better to set as False when dealing with large amount of data
    zero_pad:True,do zero padding 
    subtract_mean:True, subtract mean of rawdata before recontruction.
    returnContrastMat:True, get the contrast results also. 
    bg_kw: dict, keyword for estimatign background title. here right now, default: {"fit_offset":"mean", "fit_profile":"tilt","border_px":6}
    computeBg: bool, default as True. whether or not to compute background tilt, using parameters from bg_kw. 
* *proc_phase*: bool, Process the phase data. This includes phase unwrapping. using :func:`skimage.restoration.unwrap_phase` and correcting for 2PI phase offsets (The offset is estimated from a 1px-wide border around the image  
* *slices*: int, default -1, indicating it will process all the frames. Otherwise, it will only process 0:slices frames. 
        
* *Members and attributes*:
        .data: recontructed complex data. This is actually the phase is not processed. 
        .field: recontructed complex data where the phase is unwrapped and background is corrected (if computeBg=True)
        .amp: get amplitude 
        .pha: get processed phase data. 
        .bg: get computed and fitted background fitted data. 
        .ref: processed reference image. 
        .info: get meta data. 
        .save: save data into file (.mat, .hdf5 or .h5) 
        .contrast_mat: contrast map versus z axis. 
        .out_int: intensity map versus z axis. 
        .zpos: z-axis positions for each frame, if available. 

        typical use:
        qpi = QPImage(file_name) 
        qpi.save(...)  

        
Example dataset could be download under the request to email address: linyuechuan1989@gmail.com 
## License
PyOCT is licensed under the terms of the MIT License (see the file LICENSE).# PyOCT


