Code Monkey home page Code Monkey logo

spectrallensdensity_purkinjeimages's Introduction

Measuring ocular media spectral transmittance using Purkinje Images

Some extra simulations for the paper "A Purkinje image-based system for an assessment of the density and transmittance spectra of the human crystalline lens in vivo" Taisuke Eto, Petteri Teikari, Raymond P Najjar, Yuki Nishimura, Yuki Motomura, Manami Kuze, Shigekazu Higuchi Scientific Reports volume 10, Article number: 16445 (2020) https://doi.org/10.1038/s41598-020-73541-y

Dependendence of measured ocular media density and light source spectral power distribution (SPD)

Quick'n'dirty approximation of the error in spectral ocular media density estimation using Purkinje images as a function of the (virtual) age (as specified by the van de Kraats and van Norren 2007 ocular media model, see lensMediaWrapper.m and lensModel_vanDeKraats2007.m for code), half-bandwidth (hbw) and peak wavelength (lambda_peak) of the used light source(s).

alt text

extreme example of the over-estimation of ocular media density at age = 88 years, and at lambda_peak = 405 nm with 6 different half-bandwidths of real commercial light emitters / interference filters. You can see that when using hbw = 3 nm interference filters, the error is quite negligible, whereas unfiltered "broadband" LED starts to introduces quite massive error. Positive deltaOD means that real-life SPD (spectral power distribution) overestimates ocular media density over "ideal SPD" with all the energy on single wavelength.

The "TO-Can Narrow linewidth Laser" should be quite close to the "ideal SPD" source, and the code needs some re-checking, as there is some "spectral round-off" error probably happening at light source generation part monochromaticLightAsGaussian.m, the "ideal source" is not generated from the same code.

Light sources implemented

See the light sources in lightSource_wrapper.m:

How to use

Run densityModel_sensitivityAnalysis_v2020.m

Just play with the error plot

Run density_error_plot.m, and Matlab will import the pre-computed values from plot_debug.mat

Or just plot the ocular media density/transmittance

Run plot_lens_density.m that will give you this:

alt text

You see that if you are interested in designing your measurement system that you want to cover the short wavelength range with smaller wavelength increments as most of the density changes happen there, and in general your measurement comes noisier there. You can just throw couple of wavelengths above ~530 nm to constrain your model fit? The offset parameter in the lensModel_vanDeKraats2007.m defines the spectrally neutral "global optical density", and default value of 0.111 was used for this in lensMediaWrapper.m

Illumination intensity compensation

Run plot_compensated_lights.m which will approximate how much you should boost short wavelengths even to detect the 4th Purkinje image on shorter wavelengths (See "Illumination compensation " in Wiki for rationale behind this plot)

alt text

The 60 year old template lens should have as large as 2 log unit compensation if you would be using 400 nm peak wavelengths by simple transmittance attenuation analysis

Literature references

TODO for more detailed simulation

See the Wiki for more details, and some background ophthalmic optics theory.

spectrallensdensity_purkinjeimages's People

Contributors

petteriteikari avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.