About Indranil Sinharoy

I am a PhD student & a researcher in Electrical Engineering with focus on Computational Imaging and Computational Photography. I love signal processing, computational imaging and photography. I also love travelling to places and meeting people. Please visit my website at http://indranilsinharoy.com to learn more about me. [By the way, the red pepper in the profile picture is not photoshopped. I found this pepper in a vegetable market in California. I had to photograph it because of its uncanny resemblance to a human fist.]

Desirable properties of iris acquisition systems

In my last post, I described briefly how iris recognition works. I also described the four main modules that make up a general iris recognition system. In this post I am going to discuss some of the desirable properties of the iris acquisition module, or simply the iris camera. Although the acquisition module is the first block in the iris authentication/verification pipeline and it plays a very important role, the module has received much less attention of the researchers compared to the others.

Iris recognition algorithms have become quite mature and robust in past decade due to the rapid expansion of research both in industry and academia  [1–3]. Figure 1 shows a plot of the scientific publications (in English) on iris recognition between 1990 and 2013. The plot also shows the relative number of papers exclusively addressing the problems of the acquisition module, which is really very minuscule, compared to the total number of papers on iris recognition.

Literature survey

Figure 1. Number of publications in (English) journals on iris recognition between 1990 and 2013. The data was collected using Google scholar by searching the keywords IRIS + RECOGNITION + ACQUISITION + SEGMENTATION + NORMALIZATION + MATCHING. The plot shows that although the total number of research papers on iris recognition has grown tremendously during the last decade, the problems associated with iris acquisition have been overlooked.

The accuracy of iris recognition is highly dependent on the quality of iris images captured by the acquisition module. The key design constraints of the acquisition system are spatial resolution, standoff distance (the distance between the front of the lens and the subject), capture volume, subject motion, subject gaze direction and ambient environment [4]. Perhaps the most important of these are spatial resolution, standoff distance, and capture volume. They are described in details in the following paragraphs.

Continue reading

Primer on iris recognition

As part of my PhD research, I am working on  extending the depth-of-field of iris recognition cameras. In a series of blog posts (in the near future) I would like to share some of the things that I have learnt during the project. This post, the first one in the series, is an introduction to iris recognition biometric technology. I believe the material presented here could benefit someone new to iris recognition get a quick yet comprehensive overview of the field. In the following paragraphs, I have described the iris anatomy, and what makes it so special as a biometric technology, followed by the general basis of iris based verification, and the four major constituents of a general iris recognition system.

The human iris is the colored portion of the eye having a diameter which ranges between 10 mm and 13 mm [1,2]. The iris is perhaps the most complex tissue structure in the human body that is visible externally. The iris pattern has most of the desirable properties of an ideal biomarker, such as uniqueness, stability over time, and relatively easy accessibility. Being an internal organ, it is also protected from damage due to injuries and/or intentional fudging [3]. The presence or absence of specific features in the iris is largely determined by heredity (based on genetics); however the spatial distribution of the cells that form a particular iris pattern during embryonic development is highly chaotic. This pseudo-random morphogenesis, which is determined by epigenetic factors, results in unique patterns of the irises in all individuals including that of identical twins [2,4,5]. Even the iris patterns of the two eyes from the same individual are largely different. The diverse microstructures in the iris that manifest at multiple spatial scales [6] are shown in Figure 1. These textures, unique to each eye, provide distinctive biometric traits that are encoded by an iris recognition system into distinctive templates for the purpose of identity authentication. It is important to note that the color of the iris is not used as a biomarker since it is determined by genetics, which is not sufficiently discriminative.

Iris Anatomy

Figure 1. Complexity and uniqueness of human iris. Fine textures on the iris forms unique biometric patterns which are encoded by iris recognition systems. (Original image processed to emphasize features).

Continue reading

Plotting algebraic surfaces using Mayavi

00_postFigureWho says math is not beautiful? Anyone who doubts the beauty in math must check out algebraic surfaces.

An implicit functions has the form:

F(x,y,z, ...)=c

where, c is an arbitrary constant.

For example, the implicit equation of the unit circle is x^2 + y^2 = 1  and the equation x^2 + y^2 + z^2 = 1  describes a sphere of radius 1.

An algebraic surface is described by an implicit function F(x,y,z) = c . It may be rendered using Mayavi by evaluating the expression F(x,y,z)-c=0  on a regular (specified) grid, and then generate isosurface of contour value equal to 0.

Here are some examples of algebraic surfaces plotted using Mayavi:

I wrote a quick function called implicit_plot for plotting algebraic surfaces using Mayavi. The most important argument to the function is of course the expression  F(x,y,z)-c=0 as a string. It is probably not the best function, but the idea is to show how to plot implicit surfaces. The code snippet is included at the end of this post. Suggestions for improvement are always welcome.

Continue reading

Progression of pixel resolution in digital cameras

Thanks to the megapixel war, pixels in digital sensors have shrunk considerably over the years. Consequently, the pixel resolution (number of pixels in a digital image) has improved. Currently, the pixel resolution (assuming gray-scale sensor) can compete with the aerial resolution of lenses —on paper. This post is about a plot I created sometime back (for a different presentation) which shows the growth of pixel count and the diminishing of pixel size over the years for three popular segments of digital cameras. The green line plots the diffraction-limited (aberration free) optical resolution 3 stops below the maximum aperture available for off-the-shelf lenses during the same period. The optical resolution line doesn’t mean much; however, it is plotted to compare the sensor resolution with the optical resolution over time. The graph shows that while the sensor resolution has improved by leaps and bounds, the optical resolution hasn’t. It is no surprise though, because the optical resolution, which is limited by the fundamental nature of light —diffraction. Improving the optical resolution by traditional means is very expensive, and results in bulky lenses. The time is just right for exploring computational methods for improving the system resolution of imaging systems.


  Other interesting data-points in the graphs are:

1. The Kodak DSC460, based on a Nikon SLR, was one of the first digital cameras.

2. The Sharp J-SH04 was the cellphone with a camera.

The number of mega-pixels and the pixel resolution (decrease in pixel size) has increased rapidly for the cellphone and point-and-shoot cameras, probably driven by marketing rather than by picture quality. In the more professional segment, clearly the strategy has been different. This may be because of two main reasons — one, the image quality dictated by noise, color reproduction, low-light performance, etc are more important for these shooters, and two, building high-quality large lens is relatively more expensive.

Does the F/2.0 phone camera match the F/2.0 DSLR’s optical resolution?

Summary: Most cellphone cameras today come with “large aperture” lens such as F/2.0 or F/2.2. Since the optical resolution of a “perfect” lens (a lens devoid of any aberration) is inversely proportional to the F/# (the relation is shown in equation 1), one may assume that a F/2.0 cellphone camera lens should be able to resolve fine details on an object as well as a F/2.0 DSLR lens.

\Delta_r = \frac{1}{1.22 \lambda F/\#}         (1)

where, F/\# = f/D , f is the focal length, and D is the aperture diameter of the lens.


The above image shows two lenses of same F/#, and also of equal normalized focal length. The one on the left is a lens whose 35 mm focal length is about 28 mm (with complete camera module, including the image sensor) from a cellphone, and the lens on the right is a 28 mm DSLR lens.

The optical resolution of a lens determines how close two line-objects or point-objects be placed before the objects cannot be distinguished from each other when viewing through the lens. The minimum resolvable separation, \Delta_s, is the inverse of \Delta_r. The larger the value of \Delta_r (usually measured in line-pairs-per-mm), the better is the resolving ability of the lens. So if the f-number, F/\#, of a cellphone lens matches the F/\# of a DSLR lens, then the equation (1) seems to suggest that they have the same optical resolution! However, as it is shown in the following paragraphs, the ability to resolve fine details of a F/2.0 DSLR lens is in fact much better than a F/2.0 cellphone camera lens. Concretely, if the focal length and the aperture diameter of the cellphone lens is 1/k (k>1) times the respective parameters of the DSLR lens, then the  F/\# of the two systems are equal but the resolving ability of the cellphone lens is 1/k times that of the DSLR lens. For example, a 50 mm, F/2.0 lens (D = 25 mm), which is a first order approximation of a 50 mm DSLR lens, can resolve details as fine as 54 microns focused at a distance of 2 meters. Whereas a 5 mm, F/2.0 lens (D = 2.5 mm), a close approximation of a typical cellphone camera lens, can resolve details only up to about 540 microns focused at the same distance. This is essentially a manifestation of the difference in magnifications (or angular resolution) of the lenses.

Please read the rest of the article for details. 

Continue reading

Accessing ZEMAX/ OpticStudio from Python using PyZDDE


ZEMAX (also known as OpticStudio), a leading tool for design and analysis of optical systems, provides an in-built DDE server that enables access to ZEMAX’s features externally using any Windows application. The ability to access and control ZEMAX externally allows it to be used in many interesting and powerful ways, some of which has been documented in the “ZEMAX Extensions” chapter of the ZEMAX manual. An excellent toolbox called MZDDE, developed by Derek Griffith at CSIR, already exists for users of MATLAB. When I tried to look for an equivalent toolbox in Python, I couldn’t find one, so I decided to write one myself.

PyZDDE is a Python-based toolbox for communicating with ZEMAX using the DDE messaging protocol. It is similar to MZDDE and very much inspired by it. Currently PyZDDE is not as extensive as MZDDE as it is a work in progress. However, it has some distinguishing features — it can be used with regular Python scripts and also in an interactive environment such as an IPython shell, QtConsole or IPython notebook. The ability to interact with ZEMAX from an IPython notebook using PyZDDE can be a powerful tool for both teaching and documentation. Please visit the github repository for downloading and using the code. The github repository also contains an accompanying wiki page which describes briefly on how to use the PyZDDE toolbox.

Here I would like to briefly document the communication process between ZEMAX and Python using PyZDDE. But before that I would like to show you how simple it is to communicate with Zemax using PyZDDE using a “Hello world” example (it gets and prints the running Zemax version):

import pyzdde.zdde as pyz
link = pyz.createLink()
print("Hello Zemax version: ", link.zGetVersion())

ZPL Macro syntax highlighting using Notepad++

Using macros, written in the Zemax Programming Language (ZPL), is a powerful way to extend the functionality of ZEMAX. Zemax doesn’t provide a special editor for writing ZPL macros, and it recommends using text editors such as the NOTEPAD editor.

I love editors with syntax highlighting. Since there are no standard editors (with syntax highlighting) for writing ZPL codes, I decided to use Notepad++. It also allowed me to create a style-file which enabled syntax highlighting and support minimal code folding as shown below. The style-file contains the latest keyword, numeric function and string function definitions (as of April 2013). I have shared the style-files here in the post.

In order to download the files and see the quick instructions to use them, please continue reading.


Today (05/06/2014) I got to know about another project, created by Xinda Hu, for syntax highlighting and code folding of macro programs for both Zemax and Code V. It seems to be quite sophisticated and uses a modified form of Solarized theme. It also provides auto-complete and function calltips in the editor, which I believe can be of great help while coding. He has uploaded the required files at his GibHub page here (Zemax) and here (Code V). He has also created a GIF animation to demo the capability of his highlighter project, which can be found here. I highly recommend using his project for ZPL syntax highlighting.

Continue reading