A Julia package for working with microscope Point Spread Functions (PSFs). This package provides implementations of common PSF models and tools for integrating them with camera geometry for single-molecule localization microscopy applications.
- Multiple PSF implementations (2D and 3D models)
- Integration with camera geometry via the SMLMData.jl package
- Complex field amplitude calculations for coherent optics
- Flexible pixel integration with adjustable sampling density
- Zernike polynomial tools for wavefront modeling
- Support for dipole emitters and polarization effects
| PSF Type | Description | Key Parameters | When to Use |
|---|---|---|---|
GaussianPSF |
Isotropic 2D Gaussian | σ |
Rapid prototyping, computational efficiency |
AiryPSF |
Diffraction-limited circular aperture | nₐ, λ |
Accurate 2D diffraction modeling |
ScalarPSF |
3D scalar diffraction model | nₐ, λ, n |
3D imaging, aberrations |
VectorPSF |
3D vectorial model with polarization | nₐ, λ, optional dipole |
High-NA objectives, polarization effects |
SplinePSF |
B-spline approximation | Source PSF, sampling parameters | Accelerating computation of complex PSFs |
For detailed descriptions of each PSF type, see the documentation.
All PSF types implement a consistent interface:
# Direct evaluation
intensity = psf(x, y) # 2D position (x,y in μm)
intensity = psf(x, y, z) # 3D position (3D PSFs only)
# Complex amplitude
amp = amplitude(psf, x, y) # Returns complex field amplitude
# Camera integration
pixels = integrate_pixels(psf, camera, emitter) # Realistic image formationSee the interface documentation for details.
using Pkg
Pkg.add("MicroscopePSFs")using MicroscopePSFs, SMLMData
# Create a PSF model
psf = AiryPSF(1.4, 0.532) # NA = 1.4, λ = 0.532μm (532nm)
# or
psf = GaussianPSF(0.15) # σ = 0.15μm (150nm)
# Direct PSF evaluation at a point
intensity = psf(0.5, 0.3) # x = 0.5μm, y = 0.3μm
# Create camera (20×20 pixels, 0.1μm pixel size)
camera = IdealCamera(20, 20, 0.1)
# Create emitter
emitter = Emitter2D(1.0, 1.0, 1000.0) # x = 1μm, y = 1μm, 1000 photons
# Generate realistic microscope image
pixels = integrate_pixels(psf, camera, emitter)# Create a 3D PSF with aberrations
zernike_coeffs = ZernikeCoefficients(15) # Up to 15 Zernike terms
zernike_coeffs[6] = 0.5 # Add vertical astigmatism
psf_3d = ScalarPSF(1.4, 0.532, 1.518; zernike_coeffs=zernike_coeffs)
# Create 3D emitter
emitter_3d = Emitter3D(1.0, 1.0, 0.5, 1000.0) # x, y, z, photons
# Generate image
pixels_3d = integrate_pixels(psf_3d, camera, emitter_3d)- All physical dimensions are in micrometers (μm)
- Function arguments are (x, y, z)
- Array dimensions are [y, x, z]
- Camera coordinates have (0,0) at the top-left corner of the top-left pixel
For detailed conventions, see the documentation.
Comprehensive documentation is available:
This project is licensed under the MIT License - see the LICENSE file for details