I need to create a program that can simulate the optical system of the human eye. The input will be any image, the output would be the image that is projected onto the retina. I need it to be as accurate as possible. I am a little lost at the moment, I have been reading up on optics, and I get that, but on the computational side, I have no idea where to begin. What algorithms can be used to model optical systems physically accurately?

I need to make the optical system as physically accurate as possible, in relation to the human eye. The system must be able to model eye problems that have to do with optics in the eye, such as myopia or astigmatism. If there is more information necessary to answer, please let me know.

  • 2
    $\begingroup$ It depends on what you wish to achieve? What exactly do you want to simulate? The optics? or the processing? You will have to understand what the lens does to the light and the understand the cones cells of eye. $\endgroup$ – FredFury Jun 10 '14 at 11:39
  • $\begingroup$ @FredFury - Just the optics, all I need to do is given a 3D (simple) scene or image and the eye positioned in the direction of a part of the scene or image, the image projected onto the retina is what I need to get. I need the image on the retina to be as close to the real eye as possible. $\endgroup$ – user836045 Jun 10 '14 at 20:23
  • $\begingroup$ It's still very unclear what you want to achieve. What result do you want? Which process do you want to simulate? Do you want a stereoscopic image? $\endgroup$ – FredFury Jun 10 '14 at 20:55
  • $\begingroup$ I want to create a system that can model the optical capability of the human eye. I want to create a program which takes as input an image. I want to be able to direct the gaze of the simulated eye and focus on any part of the input image. When the simulated eye is focused I want to see what the projected image on the retina looks like. I want to change the parameters of the simulated human eye, so I can see what image projects on the retina of a person with hyperopia (farsightedness). I want to defocus the lens and see the distortion created on the image projected onto the retina as a result. $\endgroup$ – user836045 Jun 10 '14 at 21:16
  • $\begingroup$ I don't really need a steroscopic image, simulating one eye is enough. I want to trace the light from the source image and direct it through the cornea, vitreous humour, lens and see it project on to the retina. The process I want to simulate would be light itself, and I think for this purpose modelling geometrical optics would be sufficient, but diffraction may also be necessary. $\endgroup$ – user836045 Jun 10 '14 at 21:19

Ah now we are getting somewhere. You need to have a firm grasp of focus length.

Check out this link on some of the math. http://hyperphysics.phy-astr.gsu.edu/hbase/geoopt/lenseq.html . To get an idea of this I would use a DSLR with a manual focus lens and set it to the focal length as close as you can.

To do this with code? I don't know. But here's what I think. The problem with what you want to do with an image fed into an algorithm, is that the image, once taken, has a set focus, quality and resolution. So similarly like the guys on TV spy shows zooming and "enhancing" and highly zoomed in picture: You can't really do it. The focal length is cast in stone the moment the picture is taken

If you need dummy simulation you could link the focal length variable to a blurring factor in something like Python's Image library. Check this out too: https://stackoverflow.com/questions/2292233/blurring-a-picture-python-jython-picture-editing

  • $\begingroup$ I realise the image has a set focus. I am not trying to zoom into the image or enhance it. The image is periphery. The image could be a black dot the size of a pixel. The result I need is what that black dot looks like on the retina when the dot is close/far, focused/unfocused, too close to focus/infinity, (I realise not all of these are mutually exclusive), when the dot is viewed by someone with astigmatism, or myopia or hyperopia when they can and can't focus on it. $\endgroup$ – user836045 Jun 10 '14 at 22:08
  • $\begingroup$ Blurring is unfortunately not physically accurate enough. $\endgroup$ – user836045 Jun 10 '14 at 22:17
  • $\begingroup$ Ja, the image zoom remark was just an example. I think the really hard part is that this is something very physical you are trying to simulate. I can see that you could simulate the patient experience or graphically represent the condition, but too fully recreate a true scenario in code? not sure- You'll have to start digging into the behaviour of light and attempt to simulate photon movement. And that just makes my brain leak out my ear. Would be cool though. You might find this interesting: gizmag.com/image-descattering-weizmann/24737 $\endgroup$ – FredFury Jun 10 '14 at 22:23
  • $\begingroup$ Quick remark: the image is not set in stone. Physically, the image obtained is nothing more than the convolution of your object with the "point spread function" (in DSP you call that "impluse response") of your imaging system. You may enhance the picture by deconvolution. Such techniques are actually implemented in better microscopes. Another remark: you do not even need to know the PSF exactly, see "blind deconvolution". So a long story short: there is digital optics and it may help to improve things that seem to be cast in stone. $\endgroup$ – AlexE Jun 11 '14 at 11:07
  • $\begingroup$ @FredFury - thanks for that reference, it certainly is interesting. I also agree that it will be a lot of work, which is why I was hoping that someone else has done work in this area previously, so I didn't have to start from scratch. $\endgroup$ – user836045 Jun 11 '14 at 15:27

There is quite some research on modeling the human eye. For an overview, check this chapter from a book series by former Zeiss head of optics R&D H. Gross. You may check the works of R. Navarro, who is well-known for his eye model.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.