This repository contains the code used to generate the results submitted to the Optica Imaging Congress 2024 in the article "Computational inspection of VCSEL oxidation exploiting a spectrally-shaped illuminator", A. Rouxel, S. Calvez, A. Monmayrant, G. Almuneau
- Generation of VCSEL-like shapes (circle, hexagon, square) using Blender
- Calculation of various multi-layers structures using Scattering-Matrix algorithm [1], [2]
- Lateral wet oxidation simulation of these structures using the method described in [3]
- Generation of spectral filters with arbitrary spectral shapes or sinusoides only
- Monitoring system modeling (optical setup + detection)
- Segmentation algorithm (Resnet34)
- Clone the repository to your local machine.
git clone https://github.com/a-rouxel/JIVOX.git
- Install the required packages using the following command:
pip install -r requirements.txt
The dataset (train and test) is available at the following link : Link to dataset Put them in a dataset directory at the root of the project.
All the scripts used to generate the dataset are located in a "data_generation" module
All VCSEL-like shapes related scripts are located in the "shapes" module
- Generate json config files using : generate_vcsel_config_files_blend.py. Please look at the python file comments for more details on the parameters.
python 01_generate_vcsel_config_files_blend.py
These config json files will be stored in the directory specified in "dir_dataset".
- Run generation of VCSEL-like shapes using : generate_shapes.blend (Blender 3.x) and associated script "python_generation_shapes" (already loaded in the blender file). It will load the configs files generated at the previous step and produce various mask images corresponding to the VCSEL areas
- Define the multilayer stacks of interest in a json file (for now, there are in "multilayer_stacks")
python 02_init_generate_spectra_config_files.py
- Calculate the reflectivity of these stacks using the s-matrix algorithm using the implementation described in (https://gitlab.laas.fr/arouxel/s-algorithm)
python 02_real_generating_spectra_from_stack.py
The generated spectra will be stored in the directory specified in "output_dir".
- Define the oxidation parameters in the python file "03_oxidyze_aperture.py" (oxidation speed depending on Al concentration, nb of vcsels to oxidize , ...)
- Run the oxidation simulation using :
python 03_oxidyze_aperture.py
The resulting images will be stored in the directory specified in "dir_dataset".
- Generate resulting png files from various masks (corresponding to various steps of the oxidation)
- Associate the spectra from the multi-layers stacks to the corresponding files
- Generate the ground truth gif
python generate_ground_truth_data.py
- First, train the segmentation model using an arbitrary spectrum illuminator
python training_segmentation_LDA_illumination.py
- Pre-train the sinusoide generator using the following command
python training_sinus_generator.py
- Train the segmentation model using the sinusoidal illuminator
python segmentation_and_sinus.py
Checkpoints of the models are available in at the following link : Link to checkpoints Put them in a checkpoints directory at the root of the project.
- Testing both methods on the test dataset using the following command:
python testing_both_methods.py
[1]: N. P. K. Cotter, T. W. Preist, and J. R. Sambles (1995). "Scattering-matrix approach to multilayer diffraction." Journal of the Optical Society of America A, 1097–1103. Link to publication
[2]: A. Rouxel, P. Gadras, "S-algorithm matrix repository" (2023). Link to repository
[3]: Calvez, S., Lafleur, G., et al. (2018). "Modelling anisotropic lateral oxidation from circular mesas." Optical Material Express. Link to publication
[4]: Monvoisin, N. et al. (2023). "Spectrally-shaped illumination for improved optical monitoring of lateral III-V-semiconductor oxidation." Link to publication