주요 콘텐츠

Model Human Eye Diopters, Accommodation, and Refractive Errors

R2026b
Since R2026b

This example shows how optical power governs focus in the human eye, how accommodation adjusts that power for near objects, and how refractive errors arise when you mismatch the eye optics and length.

Compute Optical Power of Emmetropic Eye

In an emmetropic eye, the axial length optically matches the total refractive power, so that parallel rays from infinity focus exactly on the retina.

The eye is a compound optical system with a total power of approximately 60–61 diopters (D) [1]. A diopter is defined as the inverse of focal length measured in meters. In the eye, this power corresponds to the effective image-space behavior of the system, where light propagates through the vitreous humor rather than air.

The cornea provides the majority of the refractive power, approximately 40–45 D, due to the large difference in refractive index between the air (n=1.0) and the corneal tissue (n≈1.376) [1]. The crystalline lens contributes the remainder of the refractive power, a portion of which is variable. This variable power, which enables the eye to focus at different distances, is called accommodation. Together, these elements form a coordinated optical system that focuses incoming light onto the retinal surface.

Create a 25-year-old emmetropic eye model by using the HybridSchematicEye helper object, attached to this example as a supporting file, and compute the total optical power by using the paraxialInfo function.

eye = HybridSchematicEye(Age=25,PupilDiameter=3);
pinfo = paraxialInfo(eye.OpticalSystem,Wavelength=555);
totalPower = 1000/pinfo.FocalLength;
disp("Total eye power: " + totalPower + " D")
Total eye power: 61.5894 D
disp("Effective focal length: " + pinfo.FocalLength + " mm")
Effective focal length: 16.2366 mm

Create a 2-D visualization of the eye by using the view2d function. Trace rays through the emmetropic eye focused at infinity by using the traceRays function with a field point at zero degrees from the optical z-axis, and display them by using the addRays function. The on-axis retinal spot size is near the diffraction limit because the model places the retina at the paraxial focal plane by construction, eliminating the defocus present in a real eye.

hv = view2d(eye.OpticalSystem,Title="Emmetropic Eye Focused at Infinity (61 D)")
hv = 
  OpticalSystemViewer2D with properties:

            Title: "Emmetropic Eye Focused at Infinity (61 D)"
    OpticalSystem: [1×1 opticalSystem]
           Labels: "none"
      FieldPoints: "on"
             Rays: [0×0 optics.ui.Rays2D]
           Parent: [1×1 Figure]

  Show all properties

rb = traceRays(eye.OpticalSystem, ...
    FieldPoints=fieldPoint(Angle=[0 0]), ...
    Wavelengths=555);
addRays(hv,rb)

Figure contains an object of type optics.ui.opticalsystemviewer2d. The chart of type optics.ui.opticalsystemviewer2d has title Emmetropic Eye Focused at Infinity (61 D).

rmsOnAxis = HybridSchematicEye.retinalSpot(eye.OpticalSystem,Wavelengths=555);
disp("On-axis spot RMS: " + rmsOnAxis*1000 + " um")
On-axis spot RMS: 1.9696 um
airyRadius = airyDiskRadius(eye.OpticalSystem,Wavelengths=555);
disp("Airy radius (diffraction limit): " + airyRadius*1000)
Airy radius (diffraction limit): 3.2474

Demonstrate Object Vergence and Accommodation

When an object is at infinity, the light arriving at the cornea consists of parallel rays with zero vergence. The 61 D of power of the relaxed eye is exactly matched to the axial length, so these parallel rays converge on the retina. When an object moves closer, at distance d meters from the eye, its light diverges. The wavefront arriving at the cornea has a vergence of -1/d diopters. Diverging light focuses farther behind the lens than parallel light, so 61 D is no longer sufficient because the image falls behind the retina. The eye must add 1/d diopters of power to pull the focus back onto the retina. This additional power is called the accommodation demand. The relationship is reciprocal, meaning closer objects demand more power. Expressed in millimeters, the accommodation demand is 1000/dmm.

The crystalline lens is elastic. Ciliary muscles around it can change its shape, steepening the front surface curvature and thickening the lens [2] to increase the lens power and the total power of the eye. At age 25, the maximum accommodation is 6 D [3], resulting in a nearest focusable distance of 1000/6=167 mm.

Compute the near point distance and create a field point at that distance.

objDist = 1000/eye.MaxAccommodation;
fp = fieldPoint(Position=[0 0 -objDist]);

Compare the relaxed eye viewing a near object, which produces blur, with the accommodating eye that brings the same object into focus.

tiledlayout(2,2,TileSpacing="compact",Padding="compact");
eye.Accommodation = 0;
nexttile;
hv = view2d(eye.OpticalSystem, ...
    Title="Relaxed (0 D). " + round(objDist) + " mm Object")
hv = 
  OpticalSystemViewer2D with properties:

            Title: "Relaxed (0 D). 167 mm Object"
    OpticalSystem: [1×1 opticalSystem]
           Labels: "none"
      FieldPoints: "on"
             Rays: [0×0 optics.ui.Rays2D]
           Parent: [1×1 TiledChartLayout]

  Show all properties

rb = traceRays(eye.OpticalSystem,FieldPoints=fp,Wavelengths=555);
addRays(hv,rb)
axSpotBlur = nexttile;
[rmsBlur,spots] = HybridSchematicEye.retinalSpot(eye.OpticalSystem,FieldPoint=fp,Wavelengths=555);
scatter(spots(:,1)*1000,spots(:,2)*1000,12,"filled",MarkerFaceAlpha=0.4)
axis equal
grid on
xlabel("\mum")
ylabel("\mum")
title("Blurred: " + round(rmsBlur*1000,1) + " \mum RMS")
eye.Accommodation = eye.MaxAccommodation;
nexttile;
hv = view2d(eye.OpticalSystem, ...
    Title="Accommodating (+" + eye.MaxAccommodation + " D). " + round(objDist) + " mm Object")
hv = 
  OpticalSystemViewer2D with properties:

            Title: "Accommodating (+6 D). 167 mm Object"
    OpticalSystem: [1×1 opticalSystem]
           Labels: "none"
      FieldPoints: "on"
             Rays: [0×0 optics.ui.Rays2D]
           Parent: [1×1 TiledChartLayout]

  Show all properties

rb = traceRays(eye.OpticalSystem,FieldPoints=fp,Wavelengths=555);
addRays(hv,rb)
axSpotFocused = nexttile;
[rmsFocus,spots] = HybridSchematicEye.retinalSpot(eye.OpticalSystem,FieldPoint=fp,Wavelengths=555);
scatter(spots(:,1)*1000,spots(:,2)*1000,12,"filled",MarkerFaceAlpha=0.4)
axis equal
grid on
xlabel("\mum")
ylabel("\mum")
title("Focused: " + round(rmsFocus*1000,1) + " \mum RMS")
linkaxes([axSpotBlur,axSpotFocused],"xy")
sgtitle("Near Object: Relaxed vs. Accommodating")

Figure contains 2 axes objects and other objects of type optics.ui.opticalsystemviewer2d. Axes object 1 with title Blurred: 120 . 4 mu m RMS, xlabel \mum, ylabel \mum contains an object of type scatter. Axes object 2 with title Focused: 13 . 7 mu m RMS, xlabel \mum, ylabel \mum contains an object of type scatter. The chart of type optics.ui.opticalsystemviewer2d has title Relaxed (0 D). 167 mm Object. The chart of type optics.ui.opticalsystemviewer2d has title Accommodating (+6 D). 167 mm Object.

Simulate Myopia

In a myopic eye, the axial length is longer than the focal length requires. Parallel rays from infinity converge in front of the retina, producing a blurred image. The greater the separation between the focal plane and the retina, the stronger the myopia.

The model represents myopia as a negative RefractionDiopters value. A -3 D myope has an eye that is too long by about 1 mm. Near objects, within 333 mm for a -3 D myope, still focus correctly because their diverging wavefront effectively shortens the focal point back to the retina. Myopia can arise from excessive axial length, excessive corneal curvature, or excessive lens power. The model uses axial length as the sole mechanism, which is the most common clinical cause.

Create a -3 D myopic eye model and compare distance-object against near-object focus.

eyeMyopic = HybridSchematicEye(Age=25,PupilDiameter=3,RefractionDiopters=-3);
tiledlayout(1,2);
rmsFar = HybridSchematicEye.retinalSpot(eyeMyopic.OpticalSystem,Wavelengths=555);
nexttile;
hv = view2d(eyeMyopic.OpticalSystem, ...
    Title="Infinity: Blurred (Spot = " + round(rmsFar*1000,1) + " um)");
rb = traceRays(eyeMyopic.OpticalSystem,FieldPoints=fieldPoint(Angle=[0 0]), ...
    Wavelengths=555);
addRays(hv,rb)

Compute the retinal spot at the far point, which is 333 mm for a –3 D myope.

rmsNear = HybridSchematicEye.retinalSpot(eyeMyopic.OpticalSystem, ...
    FieldPoint=fieldPoint(Position=[0 0 -333]),Wavelengths=555);
nexttile;
hv2 = view2d(eyeMyopic.OpticalSystem, ...
    Title="333 mm: Sharp (Spot = " + round(rmsNear*1000,1) + " um)");
rb2 = traceRays(eyeMyopic.OpticalSystem, ...
    FieldPoints=fieldPoint(Position=[0 0 -333]),Wavelengths=555);
addRays(hv2,rb2)

Figure contains objects of type optics.ui.opticalsystemviewer2d. The chart of type optics.ui.opticalsystemviewer2d has title Infinity: Blurred (Spot = 79.6 um). The chart of type optics.ui.opticalsystemviewer2d has title 333 mm: Sharp (Spot = 13.8 um).

Simulate Hyperopia

In a hyperopic eye, the axial length is shorter than required. Parallel rays from infinity have not yet converged when they reach the retina. The eye must accommodate, even for distant objects, to bring the focus forward.

A +2 D hyperope compensates for distance vision by using 2 D of accommodation, but this consumes accommodation budget that is then unavailable for near focus. A positive RefractionDiopters value produces this condition in the model.

Hyperopia can result from a short axial length, flat corneal curvature, or reduced lens power. The model uses only axial length.

Create a +2 D hyperopic eye model and visualize the retinal spot in both the relaxed and accommodating states.

eyeHyperopic = HybridSchematicEye(Age=25,PupilDiameter=3,RefractionDiopters=+2);
tiledlayout(1,2);
eyeHyperopic.Accommodation = 0;
rmsRelaxed = HybridSchematicEye.retinalSpot(eyeHyperopic.OpticalSystem,Wavelengths=555);
nexttile;
hv = view2d(eyeHyperopic.OpticalSystem, ...
    Title="Relaxed: Blurred (Spot = " + round(rmsRelaxed*1000,1) + " um)")
hv = 
  OpticalSystemViewer2D with properties:

            Title: "Relaxed: Blurred (Spot = 45.5 um)"
    OpticalSystem: [1×1 opticalSystem]
           Labels: "none"
      FieldPoints: "on"
             Rays: [0×0 optics.ui.Rays2D]
           Parent: [1×1 TiledChartLayout]

  Show all properties

rb = traceRays(eyeHyperopic.OpticalSystem,FieldPoints=fieldPoint(Angle=[0 0]), ...
    Wavelengths=555);
addRays(hv,rb)
eyeHyperopic.Accommodation = 2;
rmsAccom = HybridSchematicEye.retinalSpot(eyeHyperopic.OpticalSystem,Wavelengths=555);
nexttile;
hv2 = view2d(eyeHyperopic.OpticalSystem, ...
    Title="Accommodating +2 D: Sharp (Spot = " + round(rmsAccom*1000,1) + " um)")
hv2 = 
  OpticalSystemViewer2D with properties:

            Title: "Accommodating +2 D: Sharp (Spot = 5.2 um)"
    OpticalSystem: [1×1 opticalSystem]
           Labels: "none"
      FieldPoints: "on"
             Rays: [0×0 optics.ui.Rays2D]
           Parent: [1×1 TiledChartLayout]

  Show all properties

rb2 = traceRays(eyeHyperopic.OpticalSystem,FieldPoints=fieldPoint(Angle=[0 0]), ...
    Wavelengths=555);
addRays(hv2,rb2)

Figure contains objects of type optics.ui.opticalsystemviewer2d. The chart of type optics.ui.opticalsystemviewer2d has title Relaxed: Blurred (Spot = 45.5 um). The chart of type optics.ui.opticalsystemviewer2d has title Accommodating +2 D: Sharp (Spot = 5.2 um).

References

[1] Navarro, R., J. Santamaría, and J. Bescós. "Accommodation-Dependent Model of the Human Eye with Aspherics." Journal of the Optical Society of America A 2, no. 8 (1985): 1273–1281. https://doi.org/10.1364/JOSAA.2.001273.

[2] Navarro, Rafael. "The Optical Design of the Human Eye: A Critical Review." Journal of Optometry 2, no. 1 (2009): 3–18. https://doi.org/10.3921/joptom.2009.3.

[3] Hofstetter, Henry W. "A Useful Age-Amplitude Formula." Optometric World 38 (1950): 42–45.

See Also

Functions

Topics