Microscopy I: Brightfield and Darkfield

Introduction: From Fourier Optics to Image Formation

Building on the Fourier optics concepts you learned in previous lectures, we now explore how these mathematical tools explain how microscopes work. The microscope is one of the most important optical instruments in science and medicine—it reveals structures invisible to the naked eye by magnifying and enhancing contrast.

In this lecture, we focus on Brightfield and Darkfield microscopy, the two most fundamental imaging modalities. Both rest on a elegant theoretical foundation: Abbe’s theory of imaging, which interprets image formation as a double Fourier transform. This perspective unifies optical physics with practical microscopy and explains why some objects are visible while others remain invisible.

By the end of this lecture, you will understand: - Why image formation is fundamentally a Fourier-transform problem - How the objective lens acts as a Fourier transformer - Why transparent (phase) objects are invisible in brightfield - How darkfield unlocks contrast by Fourier filtering - The resolution limits imposed by wavelength and numerical aperture


1. Image Formation as a Double Fourier Transform

1.1 Abbe’s Theory of Imaging

The revolutionary insight of Ernst Abbe (1873) was recognizing that image formation involves two sequential Fourier transforms:

  1. Object plane → Back focal plane of the objective: The objective lens takes the object and computes its Fourier transform in the back focal plane (BFP).
  2. Back focal plane → Image plane: A second Fourier transform by the objective converts the Fourier spectrum back into an image.

Let us denote: - \(o(x, y)\) = object (amplitude or phase distribution) - \(O(u, v)\) = Fourier transform of the object (spatial frequency spectrum) - \(i(x', y')\) = image

The forward propagation is described by:

\[O(u, v) = \mathcal{F}[o(x, y)]\]

where \(u, v\) are spatial frequencies in the back focal plane. The objective has focal length \(f\), and the relationship between Fourier frequencies and physical positions in the BFP is:

\[u = \frac{x_{\text{BFP}}}{\lambda f}, \quad v = \frac{y_{\text{BFP}}}{\lambda f}\]

The image is then formed by a second Fourier transform:

\[i(x', y') = \mathcal{F}^{-1}[O(u, v)]\]

However, not all Fourier components reach the image plane. The objective lens has a finite aperture, so only spatial frequencies within a certain radius are transmitted. This frequency cutoff is the key to understanding resolution and contrast.

1.2 Numerical Aperture and the Frequency Cutoff

The numerical aperture (NA) is the most important parameter in microscopy:

\[\text{NA} = n \sin(\alpha)\]

where \(n\) is the refractive index of the medium (typically 1 for air, 1.515 for oil immersion) and \(\alpha\) is the half-angle of the cone of light accepted by the objective.

The highest spatial frequency transmitted is:

\[u_{\max} = \frac{\text{NA}}{\lambda}\]

All spatial frequency components with \(\sqrt{u^2 + v^2} > u_{\max}\) are blocked. This acts as a low-pass filter:

\[O_{\text{filtered}}(u, v) = O(u, v) \cdot H(u, v)\]

where \(H(u, v)\) is a circular aperture function (the pupil function):

\[H(u, v) = \begin{cases} 1 & \text{if } \sqrt{u^2 + v^2} \leq u_{\max} \\ 0 & \text{otherwise} \end{cases}\]

This fundamental low-pass filtering explains why high-frequency details are lost in microscopy and sets the ultimate resolution limit.

1.3 The Objective as a Fourier Transformer

The objective lens can be understood as implementing a Fourier transform operation. When the object is placed at the front focal plane of the objective, light propagates to the back focal plane, where the Fourier spectrum of the object appears.

The lens equation ensures that: - Object at distance \(s_1\) from front focal plane - Image at distance \(s_2\) from back focal plane - Conjugate relationship: \(1/s_1 + 1/s_2 = 1/f\)

In standard microscopy, the object is very close to the front focal plane (within one focal length), and the image is formed far from the back focal plane (at a standard tube length, typically 160 mm), achieving large magnification.


2. Köhler Illumination

2.1 Why Köhler Illumination Matters

Proper illumination is just as important as the objective lens. There are two classical approaches:

Critical Illumination (Abbe’s original setup): - Light source directly imaged onto the specimen - High intensity but very uneven illumination - Dust, imperfections on condenser lens appear in image - Poor for quantitative work

Köhler Illumination (modern standard): - Condenser lens forms an image of the light source in the back focal plane - Object is illuminated by an essentially parallel, uniform beam - Light source imperfections do not affect the specimen image - Allows proper use of the condenser aperture diaphragm

2.2 Köhler Illumination Setup

The key components are:

  1. Field diaphragm (in object plane): Controls the illuminated area
  2. Condenser aperture diaphragm (in back focal plane): Controls the cone of illumination (NA of the condenser)
  3. Condenser lens: Forms an image of the light source in the back focal plane

For optimal Köhler illumination: - The condenser NA should match the objective NA - The field diaphragm is closed just outside the field of view - The condenser aperture is opened to approximately 80–90% of the objective aperture

The proper setting of the condenser aperture diaphragm is crucial for controlling coherence in the illumination, which affects contrast and image quality.

2.3 Illumination Coherence

Coherent illumination (plane wave, zero-coherence length): - All light arrives in phase - Produces sharp diffraction patterns - Poor for resolution of fine details - Causes speckle and diffraction artifacts

Incoherent (spatially incoherent) illumination (extended source): - Light arrives from different directions - Different spatial frequency components excited independently - Better resolution and more “real” images - Standard in modern microscopy

The degree of coherence is controlled by the coherence length:

\[\ell_c \approx \frac{\lambda}{\Delta \theta \cdot \text{NA}_c}\]

where \(\Delta \theta\) is the angular size of the illumination source and \(\text{NA}_c\) is the condenser aperture.

For incoherent imaging (which is optimal), we want \(\ell_c \ll\) specimen thickness.


3. Coherent vs. Incoherent Imaging

3.1 Linear vs. Nonlinear Response

Coherent illumination (fully coherent plane wave): - Field amplitude at the image is a Fourier transform of the field at the object - Image intensity is the square of this transformed field - Contrast depends on the phase relationships between object and scattered light - Nonlinear system: doubling incident amplitude changes the image contrast

Incoherent illumination (spatially incoherent): - Different regions of the illumination source act independently - The detected intensity is a sum of images from each source point - Mathematical: intensity image is the convolution of the object intensity with the point-spread function (PSF) - Linear system for intensity: doubling incident intensity doubles the image intensity

3.2 Point-Spread Function (PSF)

The point-spread function is the image of a point source (infinitesimal bright spot):

\[\text{PSF}(x, y) = \left| \mathcal{F}^{-1}[\text{pupil function}(u, v)] \right|^2\]

For incoherent imaging: \[\text{Image}(x, y) = \int \int \text{Object}(s, t) \cdot \text{PSF}(x - s, y - t) \, ds \, dt\]

This is a convolution. The PSF sets the diffraction-limited resolution.

For a circular aperture (typical objective), the PSF is the Airy pattern:

\[\text{PSF}(r) = I_0 \left[ 2 \frac{J_1(kr)}{kr} \right]^2\]

where \(k = \pi \text{NA} / \lambda\) and \(J_1\) is the first-order Bessel function.


4. The Optical Transfer Function (OTF) and Coherent Transfer Function (CTF)

4.1 Optical Transfer Function (OTF) for Incoherent Imaging

The Optical Transfer Function (OTF) describes how spatial frequency components are attenuated and phase-shifted as they propagate through the imaging system. It is the autocorrelation of the pupil function:

\[H_{\text{OTF}}(u, v) = \text{autocorr}[\text{pupil}(u, v)] = \iint \text{pupil}(u', v') \cdot \text{pupil}^*(u' - u, v' - v) \, du' \, dv'\]

For a circular pupil (uniform amplitude across the objective aperture):

\[H_{\text{OTF}}(k) = \frac{2}{\pi} \left[ \arccos\left(\frac{k}{2k_{\max}}\right) - \frac{k}{2k_{\max}}\sqrt{1 - \left(\frac{k}{2k_{\max}}\right)^2} \right]\]

where \(k = \sqrt{u^2 + v^2}\) is the radial spatial frequency and \(k_{\max} = \text{NA}/\lambda\) is the cutoff frequency.

Key properties of OTF: - Maximum at DC (\(k = 0\)): \(H_{\text{OTF}}(0) = 1\) (all low frequencies transmitted) - Cutoff at \(k_c = 2 \text{NA}/\lambda\) (twice the coherent cutoff!) - Monotonically decreasing: higher frequencies attenuated more - Smooth roll-off: no abrupt edges, unlike the pupil function itself

4.2 Coherent Transfer Function (CTF) for Coherent Imaging

For coherent illumination (plane wave), the imaging system is linear in field amplitude, not intensity. The transfer function is simply the pupil function itself:

\[H_{\text{CTF}}(u, v) = \text{pupil}(u, v) = \begin{cases} 1 & \text{if } \sqrt{u^2 + v^2} \leq \text{NA}/\lambda \\ 0 & \text{otherwise} \end{cases}\]

The CTF has no phase information (for a uniform pupil), but it acts as a sharp low-pass filter at:

\[k_c^{\text{coherent}} = \text{NA}/\lambda\]

4.3 Comparing OTF and CTF: Incoherent vs. Coherent

Property Incoherent (OTF) Coherent (CTF)
Function Autocorrelation of pupil Pupil itself
Cutoff frequency \(2 \text{NA}/\lambda\) \(\text{NA}/\lambda\)
Shape Smooth, monotonic decay Sharp circular edge
Better resolution? Yes, by factor of ~2 No, but sharp edges
Typical use Modern microscopy Holography, lensless imaging

The factor of 2 difference in cutoff frequency is fundamental: incoherent imaging can resolve finer details than coherent imaging with the same NA and wavelength. This is why modern microscopy uses incoherent (spatially incoherent) illumination.

4.4 The Modulation Transfer Function (MTF)

The Modulation Transfer Function is the magnitude of the OTF:

\[M(k) = |H_{\text{OTF}}(k)|\]

It represents the contrast preservation as a function of spatial frequency: - \(M(0) = 1\): perfect contrast at low frequencies - \(M(k_c) = 0\): no contrast beyond cutoff - In between: progressive loss of contrast for higher frequencies

The MTF is what limits the visibility of small structures: fine details become lower in contrast and eventually invisible when their spatial frequency exceeds \(k_c = 2 \text{NA}/\lambda\).


5. Brightfield Microscopy

5.1 Contrast in Brightfield

In brightfield (transmitted light) microscopy, the object is illuminated from below, and contrast arises from:

  1. Amplitude objects (absorbing structures):
    • Material absorbs light → reduced transmitted intensity
    • Good contrast in cells with pigments, stains, or metal nanoparticles
    • Image intensity directly reflects object absorption
  2. Phase objects (transparent structures):
    • No absorption, but refractive index differs from surroundings
    • Introduce phase shifts: \(\phi = 2\pi n \Delta n \cdot d / \lambda\)
    • Phase shifts do not affect intensity in brightfield!
    • Most biological structures (proteins, lipids, nuclei) are essentially transparent
    • Result: No contrast → invisible in brightfield without staining

This is a fundamental limitation: You cannot see unstained biological samples in brightfield microscopy.

5.2 Contrast in Terms of Fourier Components

In brightfield, the image intensity is proportional to \(|E_{\text{transmitted}}|^2\).

For a weak phase object, the transmitted field is: \[E(x, y) \approx E_0 e^{i \phi(x, y)} \approx E_0 [1 + i \phi(x, y)]\]

where \(\phi(x, y) = 2\pi n(\vec{r}) / \lambda\) is small.

The intensity is: \[I(x, y) = |E|^2 \approx E_0^2 [1 + 2 \text{Im}[\phi(x, y)]]\]

But for a purely real phase shift, \(\text{Im}[\phi] = 0\), so: \[\Delta I \approx 0\]

The phase information is encoded in the phase of the Fourier components in the back focal plane, but the intensity (what we measure) doesn’t directly reveal it. This is the fundamental problem of imaging phase objects.

5.3 Resolution in Brightfield

The minimum resolvable distance between two point sources is given by the Rayleigh criterion:

\[d = 0.61 \frac{\lambda}{\text{NA}}\]

For visible light (\(\lambda = 550\) nm) with a typical objective (NA = 1.4, oil immersion): \[d \approx 0.24 \, \mu\text{m} = 240 \, \text{nm}\]

This represents the fundamental diffraction limit. No microscope can beat this limit without exceeding the speed of light or using wavelengths shorter than visible light.


6. Fourier Filtering in the Back Focal Plane

5.1 The Pupil Plane as a Filtering Plane

The back focal plane (BFP) is where the Fourier spectrum of the object appears. By placing apertures, filters, or masks in the BFP, we can selectively control which spatial frequency components contribute to the final image.

Low-pass filtering (blocking high frequencies): - Objective aperture naturally blocks all frequencies beyond \(u_{\max} = \text{NA} / \lambda\) - Closing the aperture further increases the blur but removes noise and high-frequency artifacts - Useful for improving contrast in noisy images

High-pass filtering (blocking low frequencies): - Achieved by blocking the center of the Fourier spectrum - Removes large-scale variations, enhancing small features - Basis of darkfield microscopy (see next section)

Phase contrast (phase plate in BFP): - Introduces a phase shift of \(\pi/2\) to zero-order light - Converts phase objects into amplitude contrast - We’ll discuss this in detail in the next lecture

5.2 Quantitative Effect of Aperture Restriction

Closing the objective aperture diaphragm reduces the cutoff frequency: \[u'_{\max} = \frac{\text{NA}_{\text{eff}}}{\lambda} < u_{\max}\]

The resulting image is a convolution with a wider PSF: \[i_{\text{restricted}}(x, y) = \int \int i_{\text{unrestricted}}(s, t) \cdot \text{PSF}_{\text{wider}}(x - s, y - t) \, ds \, dt\]

This improves contrast at the cost of resolution.


7. Darkfield Microscopy

7.1 Principle: Blocking the Zero-Order

In darkfield microscopy, we block the unscattered, straight-through light (the zero-order component in the Fourier plane). Only scattered light from the object reaches the detector.

The principle is elegant: 1. Illuminate the specimen with light at an oblique angle (or ring-shaped illumination) 2. Place a central stop in the back focal plane to block the zero-order light 3. Only light scattered by the object can reach the objective lens 4. The detector sees dark background with bright scattered objects

7.2 Darkfield Setup

Ring-illumination darkfield (most common): - Light enters the objective at large angles from all sides - A circular stop blocks light traveling straight through the center - Only scattered light is collected

Oblique illumination (Schlieren darkfield): - Light approaches from one direction at an angle - A blade or edge stops the zero-order - More directional; useful for detecting edge features

The objective lens’ acceptance angle (NA) must be larger than the illumination cone, otherwise no light reaches the detector at all.

7.3 Contrast Mechanism in Darkfield

In darkfield, the image forms by scattered light interference:

\[E_{\text{scattered}}(x, y) = \int E_0(\vec{r}) \frac{\partial}{\partial n} e^{i k r} \, d\Sigma_{\text{object}}\]

where the integral is over the object surface, and the derivative represents scattering.

For an object with: - Phase changes (refractive index variations) → scatters light forward - Surface roughness → scatters light in all directions - Edges → strong diffraction and scattering

Result: Objects with phase variations or discontinuities become bright against a dark background.

7.4 Objects Visible in Darkfield

Darkfield is excellent for visualizing: - Living cells (no stain needed!) - Nanoparticles (gold, silver, latex) - Thin structures (fibers, filaments, axons) - Phase variations (organelles, membranes) - Refractive index boundaries

The contrast arises from scattering, not absorption or staining. This is why darkfield is invaluable in biology.

7.5 Darkfield as Spatial Filtering

Mathematically, darkfield corresponds to high-pass filtering in the Fourier domain. The darkfield transfer function is the brightfield transfer function minus the DC component:

\[H_{\text{DF}}(u, v) = H_{\text{BF}}(u, v) - \delta(u, v)\]

where \(\delta(u, v)\) is a Dirac delta function representing the unscattered, zero-order light.

More explicitly, the darkfield pupil function is:

\[H_{\text{darkfield}}(u, v) = \begin{cases} 0 & \text{if } \sqrt{u^2 + v^2} \leq u_{\text{stop}} \\ 1 & \text{if } u_{\text{stop}} < \sqrt{u^2 + v^2} \leq u_{\max} \end{cases}\]

where \(u_{\text{stop}}\) is the radius of the central stop and \(u_{\max} = \text{NA}/\lambda\) is the objective aperture cutoff.

Physical interpretation: - The darkfield filter removes the DC component (unscattered light, uniform background) - Only scattered light from high spatial frequencies contributes to the image - This enhances edges and fine structures while suppressing large-scale variations - Objects invisible in brightfield (transparent, weak phase contrast) become visible through scattering

This is a direct application of spatial filtering in the Fourier plane: by blocking the low frequencies, we highlight fine details that would otherwise be overwhelmed by the uniform transmitted light. The connection to the OTF (section 4) is that darkfield uses the high-frequency tail of the OTF while suppressing its peak at DC.


8. Oblique Illumination and Schlieren Methods

8.1 Oblique Illumination

When illumination comes from one side at a steep angle, we get oblique illumination. This is a hybrid between brightfield and darkfield:

  • The zero-order light still passes through (unlike pure darkfield)
  • But illumination is asymmetric
  • Shadowing effect: bright on one side, dark on the opposite edge
  • Enhances edge contrast even for phase objects

The resulting image has a characteristic 3D appearance, with apparent depth.

8.2 Schlieren Method

The Schlieren technique is a refined form of oblique darkfield: 1. Oblique illumination at a shallow angle 2. A Schlieren blade (knife edge) positioned to partially block the scattered light 3. Fine control over contrast by blade position

Schlieren is particularly useful for: - Visualizing phase gradients (refractive index changes) - Air flow visualization (optical path length changes) - Detecting mechanical waves and stress patterns - Biological structures with fine phase variations


9. Practical Considerations in Microscopy

9.1 Numerical Aperture and Immersion

Air objectives: - NA up to ~1.0 - Working distance: moderate (long) - No immersion liquid needed

Oil immersion objectives: - NA up to ~1.4 (occasionally 1.5 with special oil) - Working distance: very small (~0.1 mm) - Cedar oil (\(n = 1.515\)) increases light cone angle in the object space - Must match oil refractive index precisely; mismatch degrades image

Water immersion objectives: - NA up to ~1.2 - Used for living cells in aqueous environment - \(n_{\text{water}} = 1.33\)

The higher the NA, the better the resolution, but: - Smaller working distance → difficult to focus live cells - Optical aberrations increase (spherical, chromatic) - More expensive objective

9.2 Magnification and Useful Magnification

Useful magnification (Abbe-Rayleigh criterion): \[M_{\text{useful}} \approx 500 \times \text{NA} \text{ to } 1000 \times \text{NA}\]

For NA = 1.4: \(M_{\text{useful}}\) = 700–1400×

Magnifying beyond useful magnification (empty magnification) doesn’t reveal new detail; it just makes diffraction patterns larger.

9.3 Wavelength Dependence

The Rayleigh resolution limit: \[d = 0.61 \frac{\lambda}{\text{NA}}\]

shows that shorter wavelengths give better resolution: - UV microscopy: ~0.15 μm (UV sources expensive, require special optics) - Visible: ~0.2–0.3 μm (standard) - Red light: ~0.5 μm (lower resolution, but deeper penetration in tissues)

This is why electron microscopy (λ ~ 0.001 nm) achieves nanometer resolution.

9.4 Field of View and Depth of Field

Field of view (the area visible at once): \[\text{FOV} \approx \frac{d_{\text{eyepiece or sensor}}}{M}\]

Higher magnification → smaller field of view.

Depth of field (axial resolution): \[\text{DOF} \approx 0.64 \frac{\lambda}{n - \sqrt{n^2 - \text{NA}^2}} \approx 0.88 \frac{\lambda}{\text{NA}^2}\]

High NA → shallow depth of field. This is useful for optical sectioning (confocal microscopy, discussed later).


Code Examples: Simulating Abbe Imaging and Resolution

Example 1: Abbe Imaging Simulation

We’ll simulate the double Fourier transform process: object → Fourier transform → filtering → inverse transform.

Code
# Create a simple object: parallel lines
size = 256
x = np.linspace(-20, 20, size)
y = np.linspace(-20, 20, size)
X, Y = np.meshgrid(x, y)

# Object: three vertical lines
line_spacing = 8
object_img = (np.abs(X % line_spacing - line_spacing/2) < 1.0).astype(float)
object_img += 0.3 * (np.abs(Y - 5) < 2).astype(float)  # Add horizontal line
object_img = np.clip(object_img, 0, 1)

# Compute Fourier transform
object_ft = np.fft.fftshift(np.fft.fft2(object_img))
object_spectrum = np.abs(object_ft)

# Create circular aperture (NA filter)
# NA = 0.4 corresponds to cutoff frequency
cutoff = int(size * 0.15)  # NA relative to image size
U, V = np.meshgrid(np.linspace(-1, 1, size), np.linspace(-1, 1, size))
aperture = (U**2 + V**2 <= 0.15**2).astype(float)

# Apply filter
filtered_spectrum = object_ft * aperture

# Reconstruct image via inverse Fourier transform
reconstructed_img = np.abs(np.fft.ifft2(np.fft.ifftshift(filtered_spectrum)))
reconstructed_img /= reconstructed_img.max()

# Create figure with subplots
fig, axes = plt.subplots(2, 2, figsize=get_size(14, 12))

# Object
ax = axes[0, 0]
ax.imshow(object_img, cmap='gray', extent=[-20, 20, -20, 20], origin='lower')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# Fourier spectrum (log scale for visibility)
ax = axes[0, 1]
spectrum_log = np.log1p(object_spectrum)
im = ax.imshow(spectrum_log, cmap='hot', extent=[-1, 1, -1, 1], origin='lower')
circle = plt.Circle((0, 0), 0.15, fill=False, edgecolor='cyan', linewidth=1.5, linestyle='--')
ax.add_patch(circle)
ax.set_xlabel('u (norm.)')
ax.set_ylabel('v (norm.)')
ax.set_aspect('equal')

# Filtered spectrum
ax = axes[1, 0]
filtered_spectrum_display = np.log1p(np.abs(filtered_spectrum))
im = ax.imshow(filtered_spectrum_display, cmap='hot', extent=[-1, 1, -1, 1], origin='lower')
circle = plt.Circle((0, 0), 0.15, fill=False, edgecolor='cyan', linewidth=1.5)
ax.add_patch(circle)
ax.set_xlabel('u (norm.)')
ax.set_ylabel('v (norm.)')
ax.set_aspect('equal')

# Reconstructed image
ax = axes[1, 1]
ax.imshow(reconstructed_img, cmap='gray', extent=[-20, 20, -20, 20], origin='lower')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

fig.set_layout_engine('constrained')
plt.savefig('img/abbe_imaging.png', dpi=150, bbox_inches='tight')
plt.show()

print("High-frequency details are lost due to the finite NA of the objective.")
Figure 1— Abbe’s double Fourier transform theory of imaging. (a) Object: a pattern of lines. (b) Fourier spectrum in back focal plane (hot colormap: log intensity). (c) Spectrum after low-pass filtering by the objective aperture (NA = 0.4, hot colormap: log intensity). (d) Reconstructed image via inverse Fourier transform.
High-frequency details are lost due to the finite NA of the objective.

Example 2: Effect of Numerical Aperture on Resolution

Code
# Create object: Ronchi grating with varying frequencies
size = 256
x = np.linspace(-10, 10, size)
X, Y = np.meshgrid(x, x)

# Multi-frequency grating
object_grating = (np.sin(2 * np.pi * 3 * X) + 1) / 2  # 3 lines/10 μm
object_grating += 0.5 * (np.sin(2 * np.pi * 6 * X) + 1) / 2  # 6 lines/10 μm
object_grating += 0.3 * (np.sin(2 * np.pi * 12 * X) + 1) / 2  # 12 lines/10 μm
object_grating /= 2.8
object_grating = np.clip(object_grating, 0, 1)

# Different NA values
na_values = [0.2, 0.4, 0.6, 1.0, 1.4]
images_na = []

U, V = np.meshgrid(np.linspace(-1, 1, size), np.linspace(-1, 1, size))
object_ft = np.fft.fftshift(np.fft.fft2(object_grating))

for na in na_values:
    aperture = (U**2 + V**2 <= (na * 0.15)**2).astype(float)
    filtered_ft = object_ft * aperture
    img = np.abs(np.fft.ifft2(np.fft.ifftshift(filtered_ft)))
    images_na.append(img / img.max())

# Create figure
fig, axes = plt.subplots(2, 3, figsize=get_size(15, 10))

# Top row: object and NA = 0.2
ax = axes[0, 0]
ax.imshow(object_grating, cmap='gray', extent=[-10, 10, -10, 10], origin='lower')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

for i, na in enumerate(na_values):
    row = (i + 1) // 3
    col = (i + 1) % 3
    if row >= 2:
        break
    ax = axes[row, col]
    ax.imshow(images_na[i], cmap='gray', extent=[-10, 10, -10, 10], origin='lower')
    ax.set_xlabel('x (μm)')
    ax.set_ylabel('y (μm)')
    ax.set_aspect('equal')

# Bottom row: intensity profile at different NAs
ax = axes[1, 2]
y_center = size // 2
for i, na in enumerate(na_values):
    intensity_line = images_na[i][y_center, :]
    ax.plot(x, intensity_line, label=f'NA = {na:.1f}', linewidth=1.5)
ax.set_xlabel('x (μm)')
ax.set_ylabel('Intensity')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
ax.set_xlim([-5, 5])

plt.tight_layout()
plt.savefig('img/na_resolution.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"Higher NA resolves finer details. Resolution: d = 0.61λ/NA")
Figure 2— Effect of numerical aperture on resolution. Top row: object (high-frequency grating). Middle rows: images at different NA values. Bottom: intensity profile showing how increased NA resolves finer details.
Higher NA resolves finer details. Resolution: d = 0.61λ/NA

Example 3: Darkfield Filtering Simulation

Code
# Create a phase object: transparent structures
size = 256
x = np.linspace(-20, 20, size)
X, Y = np.meshgrid(x, x)

# Phase object: two transparent circles with different refractive indices
phase_obj = np.zeros_like(X)
phase_obj += 0.5 * np.exp(-((X - 8)**2 + (Y - 8)**2) / 20)  # Circle 1
phase_obj += 0.3 * np.exp(-((X + 8)**2 + (Y + 8)**2) / 15)  # Circle 2

# In brightfield (intensity only), phase objects don't contribute to contrast
# But for simulation, we'll work with the complex field
E0 = 1.0
E_transmitted = E0 * np.exp(1j * 2 * np.pi * phase_obj / np.pi)

# Compute Fourier transform
field_ft = np.fft.fftshift(np.fft.fft2(E_transmitted))
spectrum = np.abs(field_ft)**2

# Brightfield image (just intensity)
brightfield_img = np.abs(E_transmitted)**2

# Darkfield: block low frequencies (central stop)
U, V = np.meshgrid(np.linspace(-1, 1, size), np.linspace(-1, 1, size))
darkfield_filter = (U**2 + V**2 > 0.08**2).astype(float)  # High-pass
darkfield_filter *= (U**2 + V**2 <= 0.35**2).astype(float)  # Within objective aperture

# Reconstruct darkfield image
field_ft_filtered = field_ft * darkfield_filter
field_darkfield = np.fft.ifft2(np.fft.ifftshift(field_ft_filtered))
darkfield_img = np.abs(field_darkfield)**2
darkfield_img /= darkfield_img.max()

# Create figure
fig, axes = plt.subplots(2, 3, figsize=get_size(15, 10))

# Phase object
ax = axes[0, 0]
im = ax.imshow(phase_obj, cmap='viridis', extent=[-20, 20, -20, 20], origin='lower')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# Brightfield image
ax = axes[0, 1]
ax.imshow(brightfield_img, cmap='gray', extent=[-20, 20, -20, 20], origin='lower')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# Fourier spectrum
ax = axes[0, 2]
spectrum_log = np.log1p(spectrum)
im = ax.imshow(spectrum_log, cmap='hot', extent=[-1, 1, -1, 1], origin='lower')
ax.set_xlabel('u (norm.)')
ax.set_ylabel('v (norm.)')
ax.set_aspect('equal')

# Darkfield filter visualization
ax = axes[1, 0]
im = ax.imshow(darkfield_filter, cmap='RdYlGn', extent=[-1, 1, -1, 1], origin='lower')
circle_inner = plt.Circle((0, 0), 0.08, fill=False, edgecolor='red', linewidth=1.5, linestyle='--')
circle_outer = plt.Circle((0, 0), 0.35, fill=False, edgecolor='blue', linewidth=1.5, linestyle='--')
ax.add_patch(circle_inner)
ax.add_patch(circle_outer)
ax.set_xlabel('u (norm.)')
ax.set_ylabel('v (norm.)')
ax.set_aspect('equal')

# Darkfield image
ax = axes[1, 1]
ax.imshow(darkfield_img, cmap='gray', extent=[-20, 20, -20, 20], origin='lower')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# Intensity profiles comparison
ax = axes[1, 2]
y_center = size // 2
ax.plot(x, brightfield_img[y_center, :], label='Brightfield', linewidth=1.5, alpha=0.7)
ax.plot(x, darkfield_img[y_center, :], label='Darkfield', linewidth=1.5, alpha=0.7)
ax.set_xlabel('x (μm)')
ax.set_ylabel('$I$ (norm.)')
ax.grid(True, alpha=0.3)

fig.set_layout_engine('constrained')
plt.savefig('img/darkfield_filtering.png', dpi=150, bbox_inches='tight')
plt.show()

print("Darkfield converts phase information into intensity contrast by blocking DC light!")
Figure 3— Darkfield microscopy as high-pass filtering in Fourier space. (a) Phase object (viridis colormap: phase shift in units of \(\pi\) rad). (b) Brightfield image (no contrast because phases don’t affect intensity). (c) Fourier spectrum (hot colormap: log intensity). (d) Darkfield filter (blocks low frequencies). (e) Darkfield image shows high contrast. (f) Intensity profiles: blue is brightfield, orange is darkfield.
Darkfield converts phase information into intensity contrast by blocking DC light!

Example 4: Resolution and Airy Patterns

Code
# Define Airy pattern
def airy_pattern(r, k):
    """Normalized Airy pattern: PSF of a circular aperture."""
    # Avoid division by zero
    r_safe = np.where(r < 1e-10, 1e-10, r)
    airy = (2 * special.j1(k * r_safe) / (k * r_safe))**2
    airy[r < 1e-10] = 1.0
    return airy

# Parameters
na = 1.0
wavelength = 0.55  # μm
k = np.pi * na / wavelength

# Create spatial grid
size = 256
x = np.linspace(-5, 5, size)
y = np.linspace(-5, 5, size)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)

# PSF
psf = airy_pattern(R, k)

# Rayleigh limit
rayleigh = 0.61 * wavelength / na

# Two point sources at different separations
source1_pos = np.array([0, 0])

# Case 1: Just resolved (Rayleigh limit)
source2_pos_resolved = np.array([rayleigh, 0])
r1 = np.sqrt((X - source1_pos[0])**2 + (Y - source1_pos[1])**2)
r2 = np.sqrt((X - source2_pos_resolved[0])**2 + (Y - source2_pos_resolved[1])**2)
image_resolved = airy_pattern(r1, k) + airy_pattern(r2, k)

# Case 2: Unresolved (half Rayleigh limit)
source2_pos_unresolved = np.array([rayleigh * 0.5, 0])
r1 = np.sqrt((X - source1_pos[0])**2 + (Y - source1_pos[1])**2)
r2 = np.sqrt((X - source2_pos_unresolved[0])**2 + (Y - source2_pos_unresolved[1])**2)
image_unresolved = airy_pattern(r1, k) + airy_pattern(r2, k)

# Create figure
fig = plt.figure(figsize=get_size(15, 11))
gs = GridSpec(3, 3, figure=fig)

# PSF (1D profile)
ax = fig.add_subplot(gs[0, 0])
x_plot = np.linspace(-3, 3, 100)
R_plot = np.abs(x_plot)
psf_1d = airy_pattern(R_plot, k)
ax.plot(x_plot, psf_1d, linewidth=1.5, color='blue')
ax.fill_between(x_plot, psf_1d, alpha=0.3, color='blue')
ax.axvline(x=rayleigh, color='red', linestyle='--', linewidth=1, label=f'Rayleigh = {rayleigh:.3f} μm')
ax.set_xlabel('r (μm)')
ax.set_ylabel('Intensity')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)

# PSF 2D
ax = fig.add_subplot(gs[0, 1])
im = ax.imshow(psf, cmap='hot', extent=[-5, 5, -5, 5], origin='lower', norm=Normalize(vmin=0, vmax=1))
circle = plt.Circle((0, 0), rayleigh, fill=False, edgecolor='cyan', linewidth=1, linestyle='--')
ax.add_patch(circle)
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# NA effect
ax = fig.add_subplot(gs[0, 2])
na_vals = np.array([0.5, 0.75, 1.0, 1.4])
rayleigh_vals = 0.61 * wavelength / na_vals
ax.plot(na_vals, rayleigh_vals, 'o-', linewidth=2, markersize=8, color='darkblue')
ax.fill_between(na_vals, rayleigh_vals, alpha=0.2, color='darkblue')
ax.set_xlabel('Numerical Aperture')
ax.set_ylabel('Rayleigh limit d (μm)')
ax.grid(True, alpha=0.3)

# Two sources: just resolved
ax = fig.add_subplot(gs[1, 0])
im = ax.imshow(image_resolved, cmap='hot', extent=[-5, 5, -5, 5], origin='lower')
ax.plot(0, 0, 'c+', markersize=15, markeredgewidth=2, label='Source 1')
ax.plot(rayleigh, 0, 'c+', markersize=15, markeredgewidth=2, label='Source 2')
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# Two sources: unresolved
ax = fig.add_subplot(gs[1, 1])
im = ax.imshow(image_unresolved, cmap='hot', extent=[-5, 5, -5, 5], origin='lower')
ax.plot(0, 0, 'c+', markersize=15, markeredgewidth=2)
ax.plot(rayleigh * 0.5, 0, 'c+', markersize=15, markeredgewidth=2)
ax.set_xlabel('x (μm)')
ax.set_ylabel('y (μm)')
ax.set_aspect('equal')

# Intensity profiles
ax = fig.add_subplot(gs[1, 2])
x_line = x
intensity_resolved = image_resolved[size // 2, :]
intensity_unresolved = image_unresolved[size // 2, :]
ax.plot(x_line, intensity_resolved, linewidth=1.5, alpha=0.7)
ax.plot(x_line, intensity_unresolved, linewidth=1.5, alpha=0.7)
ax.axvline(x=0, color='red', linestyle=':', alpha=0.5)
ax.axvline(x=rayleigh, color='red', linestyle=':', alpha=0.5)
ax.axvline(x=rayleigh * 0.5, color='orange', linestyle=':', alpha=0.5)
ax.set_xlabel('x (μm)')
ax.set_ylabel('Intensity')
ax.grid(True, alpha=0.3)
ax.set_xlim([-3, 3])

# Resolving power vs wavelength
ax = fig.add_subplot(gs[2, 0])
wavelengths = np.linspace(0.3, 0.9, 100)
rayleigh_vals = 0.61 * wavelengths / 1.0
ax.fill_between(wavelengths, rayleigh_vals, alpha=0.3, color='purple')
ax.plot(wavelengths, rayleigh_vals, linewidth=2, color='purple')
ax.axvline(x=0.55, color='red', linestyle='--', label='Visible (550 nm)')
ax.set_xlabel('Wavelength (μm)')
ax.set_ylabel('Rayleigh limit (μm)')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)

# Summary table
ax = fig.add_subplot(gs[2, 1:])
ax.axis('off')
summary_text = f"""
RESOLUTION LIMITS AND PRACTICAL VALUES

Rayleigh Criterion:  d = 0.61 λ / NA

For visible light (λ = 550 nm):
  • Air objective (NA = 0.95):     d ≈ 360 nm
  • Oil objective (NA = 1.4):        d ≈ 240 nm
  • Water objective (NA = 1.2):      d ≈ 280 nm

Depth of Field:      DOF ≈ 0.88 λ / NA²
  • NA = 1.0:         DOF ≈ 0.5 μm
  • NA = 1.4:         DOF ≈ 0.25 μm

Useful Magnification:  M_useful = 500–1000 × NA
  • NA = 1.0:         M = 500–1000×
  • NA = 1.4:         M = 700–1400×
"""
ax.text(0.1, 0.5, summary_text, family='monospace',
        verticalalignment='center', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))

fig.set_layout_engine('constrained')
plt.savefig('img/resolution_airy.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"Rayleigh criterion for NA = {na}: d = {rayleigh:.3f} μm")
/var/folders/t4/_9qps8wj56jc60nwkr3nrcr00000gn/T/ipykernel_11904/1430197535.py:149: UserWarning:

constrained_layout not applied because axes sizes collapsed to zero.  Try making figure larger or Axes decorations smaller.

/Users/fci/python_default_env/.venv/lib/python3.13/site-packages/IPython/core/pylabtools.py:170: UserWarning:

constrained_layout not applied because axes sizes collapsed to zero.  Try making figure larger or Axes decorations smaller.
Figure 4— Resolution limit and Airy patterns. (a) PSF cross-section at NA = 1.0 with Rayleigh distance marked. (b) 2D PSF (hot colormap: intensity). (c) NA vs. Rayleigh limit. (d) Two sources at the Rayleigh limit (hot colormap: intensity, cyan crosses mark source positions). (e) Two unresolved sources. (f) Intensity profiles (blue: at Rayleigh limit, orange: unresolved). (g) Rayleigh limit vs. wavelength.
Rayleigh criterion for NA = 1.0: d = 0.336 μm

Example 5: Optical Transfer Function (OTF) for Incoherent Imaging

Code
# Compute OTF for a circular aperture
def compute_otf_circular(k, na, wavelength):
    """
    Optical Transfer Function for a circular aperture (incoherent imaging).
    OTF is the autocorrelation of the pupil function.

    For a circular uniform pupil:
    OTF(k) = (2/π) * [arccos(k/2k_max) - (k/2k_max)*sqrt(1 - (k/2k_max)²)]

    where k is spatial frequency, k_max = NA/λ
    """
    k_max = na / wavelength
    k_normalized = k / (2 * k_max)

    # Avoid division by zero and out-of-range arccos
    k_normalized = np.clip(k_normalized, 0, 1)

    otf = np.where(k <= 2 * k_max,
                   (2 / np.pi) * (np.arccos(k_normalized) -
                                  k_normalized * np.sqrt(1 - k_normalized**2)),
                   0)
    return otf, k_max

# Parameters
wavelength = 0.55  # μm (green light)
na_values = np.array([0.3, 0.6, 1.0, 1.4])

# Spatial frequency range
k = np.linspace(0, 3, 300) / wavelength  # in units of 1/μm

# Compute OTF for each NA
fig, axes = plt.subplots(1, 3, figsize=get_size(15, 5))

# Plot 1: OTF profiles at different NA
ax = axes[0]
for na in na_values:
    otf, k_max = compute_otf_circular(k, na, wavelength)
    ax.plot(k * wavelength, otf, linewidth=2, label=f'NA = {na:.1f}', marker='o', markersize=3, markevery=15)
    # Mark cutoff frequency
    k_c = 2 * na / wavelength
    ax.axvline(x=k_c, linestyle='--', alpha=0.4, linewidth=1)

ax.set_xlabel('Spatial frequency $k$ (in units of $\lambda^{-1}$)')
ax.set_ylabel('OTF($k$)')
ax.set_xlim([0, 3])
ax.set_ylim([0, 1.05])
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# Plot 2: Coherent vs. Incoherent cutoff
ax = axes[1]
na_range = np.linspace(0.2, 1.6, 50)
k_c_coherent = na_range / wavelength
k_c_incoherent = 2 * na_range / wavelength

ax.plot(na_range, k_c_incoherent * wavelength, 'b-', linewidth=2.5, label='Incoherent (OTF)')
ax.plot(na_range, k_c_coherent * wavelength, 'r--', linewidth=2.5, label='Coherent (CTF)')
ax.fill_between(na_range, k_c_coherent * wavelength, k_c_incoherent * wavelength,
                alpha=0.2, color='blue', label='2× resolution gain')
ax.set_xlabel('Numerical Aperture')
ax.set_ylabel('Cutoff frequency $k_c$ ($\lambda^{-1}$)')
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# Plot 3: Modulation transfer function (contrast preservation)
ax = axes[2]
na_ref = 1.0
otf, k_max = compute_otf_circular(k, na_ref, wavelength)

ax.fill_between(k * wavelength, 0, otf, alpha=0.3, color='steelblue', label='Passband')
ax.plot(k * wavelength, otf, 'steelblue', linewidth=2.5)

# Add annotations
k_c_ref = 2 * na_ref / wavelength
ax.axvline(x=k_c_ref, color='red', linestyle='--', linewidth=2, label=f'Cutoff at NA={na_ref}')
ax.text(k_c_ref + 0.1, 0.5, f'$k_c = 2 \\times \\text{{NA}}/\\lambda$', fontsize=10)

# Mark some key frequencies
for frac in [0.25, 0.5, 0.75, 1.0]:
    k_test = frac * k_c_ref
    otf_val = compute_otf_circular(np.array([k_test]), na_ref, wavelength)[0][0]
    ax.plot(k_test, otf_val, 'ro', markersize=6)
    ax.text(k_test + 0.05, otf_val + 0.05, f'{frac:.0%}', fontsize=8)

ax.set_xlabel('Spatial frequency $k$ ($\lambda^{-1}$)')
ax.set_ylabel('$|H_{\\text{OTF}}(k)|$ (Modulation)')
ax.set_xlim([0, 3])
ax.set_ylim([0, 1.1])
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('img/otf.png', dpi=150, bbox_inches='tight')
plt.show()

# Print summary table
print("=" * 70)
print("OPTICAL TRANSFER FUNCTION (OTF) SUMMARY")
print("=" * 70)
print(f"\nFor wavelength λ = {wavelength} μm (green light):\n")
print("NA    | CTF Cutoff (NA/λ) | OTF Cutoff (2NA/λ) | Resolution Gain")
print("-" * 70)
for na in na_values:
    ctf_cutoff = na / wavelength
    otf_cutoff = 2 * na / wavelength
    print(f"{na:.1f}  | {ctf_cutoff:8.2f} μm⁻¹       | {otf_cutoff:9.2f} μm⁻¹      | 2× (incoherent wins)")
print("\nKey insight: Incoherent imaging can resolve details at twice the")
print("frequency compared to coherent imaging with the same NA!")
print("=" * 70)
<>:43: SyntaxWarning:

invalid escape sequence '\l'

<>:61: SyntaxWarning:

invalid escape sequence '\l'

<>:85: SyntaxWarning:

invalid escape sequence '\l'

<>:43: SyntaxWarning:

invalid escape sequence '\l'

<>:61: SyntaxWarning:

invalid escape sequence '\l'

<>:85: SyntaxWarning:

invalid escape sequence '\l'

/var/folders/t4/_9qps8wj56jc60nwkr3nrcr00000gn/T/ipykernel_11904/228192196.py:43: SyntaxWarning:

invalid escape sequence '\l'

/var/folders/t4/_9qps8wj56jc60nwkr3nrcr00000gn/T/ipykernel_11904/228192196.py:61: SyntaxWarning:

invalid escape sequence '\l'

/var/folders/t4/_9qps8wj56jc60nwkr3nrcr00000gn/T/ipykernel_11904/228192196.py:85: SyntaxWarning:

invalid escape sequence '\l'
Figure 5— Optical Transfer Function (OTF) for incoherent imaging at different NA values. (a) OTF profiles showing how higher NA extends the passband to higher spatial frequencies. (b) Comparison of coherent (CTF) vs. incoherent (OTF) cutoff frequencies. (c) How OTF modulates contrast as a function of spatial frequency.
======================================================================
OPTICAL TRANSFER FUNCTION (OTF) SUMMARY
======================================================================

For wavelength λ = 0.55 μm (green light):

NA    | CTF Cutoff (NA/λ) | OTF Cutoff (2NA/λ) | Resolution Gain
----------------------------------------------------------------------
0.3  |     0.55 μm⁻¹       |      1.09 μm⁻¹      | 2× (incoherent wins)
0.6  |     1.09 μm⁻¹       |      2.18 μm⁻¹      | 2× (incoherent wins)
1.0  |     1.82 μm⁻¹       |      3.64 μm⁻¹      | 2× (incoherent wins)
1.4  |     2.55 μm⁻¹       |      5.09 μm⁻¹      | 2× (incoherent wins)

Key insight: Incoherent imaging can resolve details at twice the
frequency compared to coherent imaging with the same NA!
======================================================================

Summary

In this lecture, we have developed a complete understanding of how microscopes form images, based on Abbe’s theory and Fourier optics:

  1. Image formation is a double Fourier transform: Object → Fourier plane → Image
  2. Numerical aperture sets the frequency cutoff and resolution limit
  3. Köhler illumination ensures uniform, proper illumination
  4. Brightfield microscopy suffers from poor contrast for transparent (phase) objects
  5. Darkfield microscopy exploits Fourier filtering to reveal phase structure and scattering
  6. Resolution is fundamentally limited by diffraction: \(d = 0.61 \lambda / \text{NA}\)

In the next lecture, we will explore Phase Contrast Microscopy, which solves the phase-object problem in brightfield by introducing a phase shift in the Fourier plane, converting invisible phase variations into visible intensity variations—an elegant application of Fourier filtering.


Key Formulas and Results

Concept Formula Remarks
Numerical Aperture \(\text{NA} = n \sin \alpha\) \(n\) = refractive index, \(\alpha\) = half-cone angle
Rayleigh Criterion \(d = 0.61 \lambda / \text{NA}\) Minimum resolvable distance
Frequency Cutoff \(u_{\max} = \text{NA} / \lambda\) Highest spatial frequency transmitted
Useful Magnification \(M = 500–1000 \times \text{NA}\) Avoid empty magnification
Depth of Field \(\text{DOF} \approx 0.88 \lambda / \text{NA}^2\) Axial resolution
Coherence Length \(\ell_c \approx \lambda / (\Delta \theta \cdot \text{NA}_c)\) Controls degree of coherence

Fourier Optics Perspective: Unifying the Concepts

To deepen your intuition, here is a unified summary of everything we have covered, viewed entirely through the lens of Fourier space:

Concept Fourier-Space Interpretation
Image formation Double Fourier transform: object (\(x,y\)) → spectrum (\(u,v\)) → filtered spectrum → image (\(x',y'\))
Objective lens Acts as a low-pass filter: transmits only spatial frequencies with \(\sqrt{u^2+v^2} \leq \text{NA}/\lambda\)
Pupil function The transfer function in field space (coherent): \(H_{\text{CTF}}(u,v) = \text{pupil}(u,v)\), sharp cutoff at \(\text{NA}/\lambda\)
Point-spread function (PSF) Fourier transform of the pupil function: \(\text{PSF} = \|\mathcal{F}^{-1}[\text{pupil}]\|^2\)
Optical Transfer Function (OTF) Autocorrelation of the pupil function (incoherent imaging): smooth modulation of spatial frequencies, cutoff at \(2\text{NA}/\lambda\)
Resolution limit Set by the cutoff frequency: \(d = 0.61\lambda/\text{NA}\) (incoherent), or equivalently, \(d = \lambda/(2\text{NA})\) from the OTF cutoff \(2\text{NA}/\lambda\)
Brightfield microscopy No high-pass component: DC (zero-order) dominates; phase objects are invisible because phase information is encoded in the imaginary part of Fourier components, but we only measure intensity
Brightfield phase problem Phase information \(\phi(x,y)\) modulates the Fourier spectrum as \(e^{i\phi}\), but intensity detection loses this phase: \(\|\mathcal{F}[e^{i\phi}]\|^2\) loses the phase of the components
Darkfield microscopy High-pass filter: removes DC component by blocking the zero-order light. Transfer function: \(H_{\text{DF}}(u,v) = H_{\text{BF}} - \delta(u,v)\). Only high-frequency scattered light contributes, revealing edges and phase variations
Fourier filtering Placing masks in the back focal plane directly modulates which spatial frequencies reach the image plane: low-pass (blur), high-pass (edges), band-pass (fine detail only)
Coherent vs. incoherent Coherent: CTF is the pupil itself (sharp edges); Incoherent: OTF is pupil autocorrelation (smooth decay). Incoherent wins because its cutoff is twice as high, allowing finer resolution with the same NA

Key takeaway: Every concept in microscopy can be understood as a filter in spatial frequency space. The ultimate goal is to design imaging systems that extend the passband to higher frequencies (higher NA) or selectively amplify contrast at specific frequencies (darkfield, phase contrast, structured illumination).


Experimental Connections

Image formation in microscopy is best understood by doing it:

Abbe diffraction experiment Place a fine grating (e.g., a diffraction grating or a piece of fine mesh) on the microscope stage. In the back focal plane of the objective, observe the discrete diffraction orders. Progressively block higher orders with a slit or iris — watch how the image loses fine detail. This is Abbe’s original experiment from 1873.

Measuring the point spread function Image fluorescent beads smaller than the diffraction limit (e.g., 100 nm beads with a 0.5 μm resolution objective). The bead images are direct measurements of the PSF. Fit with an Airy function to extract the effective NA. Compare objectives of different NA.

Darkfield microscopy in practice Block the central (DC) order at the back focal plane with a small opaque disk. Only scattered light reaches the image plane — transparent specimens that are invisible in brightfield suddenly glow against a dark background. Try with unstained onion skin cells or colloidal nanoparticles in water.

Resolution limit demonstration Image a USAF 1951 resolution test target with objectives of different NA. Identify the smallest resolved group/element. Compare to the theoretical Rayleigh limit \(d = 0.61\lambda/\text{NA}\). Discuss why the measured resolution is often worse than the theoretical limit (aberrations, vibrations, sample preparation).

Spatial filtering Place masks in the Fourier plane of a 4f system: low-pass (blur), high-pass (edge detection), directional (enhance features along one axis). This directly connects Fourier optics theory to practical image processing.

Further Reading

The following references are linked to the central Resources & Recommended Reading page:

  • Goodman, Ch. 6 — Frequency analysis of optical imaging systems. The essential theoretical treatment.
  • Saleh & Teich, Ch. 4.4 — Imaging systems and the optical transfer function.
  • Hecht, Ch. 11.3 — Abbe theory and the diffraction limit in microscopy.
  • Murphy & Davidson (2013)Fundamentals of Light Microscopy. Excellent practical guide with real microscope images.
  • Mertz (2019)Introduction to Optical Microscopy. Modern treatment connecting Fourier optics to microscopy.
  • Born & Wolf, Ch. 8–9 — Rigorous diffraction theory of image formation.

Lecture 8: Microscopy I — Introduction to Photonics