Examples

2D Refocusing of an HL60 cell

The data show a live HL60 cell imaged with quadriwave lateral shearing interferometry (SID4Bio, Phasics S.A., France). The diameter of the cell is about 20µm.

_images/refocus_cell.jpg

refocus_cell.py

 1import matplotlib.pylab as plt
 2import numpy as np
 3import unwrap
 4
 5import nrefocus
 6
 7from example_helper import load_cell
 8
 9# load initial cell
10cell1 = load_cell("HL60_field.zip")
11
12# refocus to two different positions
13cell2 = nrefocus.refocus(cell1, 15, 1, 1)  # forward
14cell3 = nrefocus.refocus(cell1, -15, 1, 1)  # backward
15
16# amplitude range
17vmina = np.min(np.abs(cell1))
18vmaxa = np.max(np.abs(cell1))
19ampkw = {"cmap": plt.get_cmap("gray"),
20         "vmin": vmina,
21         "vmax": vmaxa}
22
23# phase range
24cell1p = unwrap.unwrap(np.angle(cell1))
25cell2p = unwrap.unwrap(np.angle(cell2))
26cell3p = unwrap.unwrap(np.angle(cell3))
27vminp = np.min(cell1p)
28vmaxp = np.max(cell1p)
29phakw = {"cmap": plt.get_cmap("coolwarm"),
30         "vmin": vminp,
31         "vmax": vmaxp}
32
33# plots
34fig, axes = plt.subplots(2, 3, figsize=(8, 4.5))
35axes = axes.flatten()
36for ax in axes:
37    ax.xaxis.set_major_locator(plt.NullLocator())
38    ax.yaxis.set_major_locator(plt.NullLocator())
39
40# titles
41axes[0].set_title("focused backward")
42axes[1].set_title("original image")
43axes[2].set_title("focused forward")
44
45# data
46mapamp = axes[0].imshow(np.abs(cell3), **ampkw)
47axes[1].imshow(np.abs(cell1), **ampkw)
48axes[2].imshow(np.abs(cell2), **ampkw)
49mappha = axes[3].imshow(cell3p, **phakw)
50axes[4].imshow(cell1p, **phakw)
51axes[5].imshow(cell2p, **phakw)
52
53# colobars
54cbkwargs = {"fraction": 0.045}
55plt.colorbar(mapamp, ax=axes[0], label="amplitude [a.u.]", **cbkwargs)
56plt.colorbar(mapamp, ax=axes[1], label="amplitude [a.u.]", **cbkwargs)
57plt.colorbar(mapamp, ax=axes[2], label="amplitude [a.u.]", **cbkwargs)
58plt.colorbar(mappha, ax=axes[3], label="phase [rad]", **cbkwargs)
59plt.colorbar(mappha, ax=axes[4], label="phase [rad]", **cbkwargs)
60plt.colorbar(mappha, ax=axes[5], label="phase [rad]", **cbkwargs)
61
62plt.tight_layout()
63plt.show()

Compare available Metrics for Refocusing

The HL60 cell data used is described in refocus_cell.py.

_images/compare_metrics.png

compare_metrics.py

 1import nrefocus
 2from nrefocus.metrics import METRICS
 3import matplotlib.pyplot as plt
 4
 5from examples.example_helper import load_cell
 6
 7# load initial cell and create rf object
 8rf = nrefocus.iface.RefocusNumpy(field=load_cell("HL60_field.zip"),
 9                                 wavelength=647e-9,
10                                 pixel_size=0.139e-6,
11                                 kernel="helmholtz")
12
13# autofocus the image for each metric
14my_metrics = list(METRICS.keys())
15
16fig, axes = plt.subplots(1, len(my_metrics), figsize=(12, 5))
17
18for i, mt in enumerate(my_metrics):
19    af_vals = rf.autofocus(metric=mt,
20                           minimizer="lmfit",
21                           interval=(-5e-6, 5e-6),
22                           ret_field=True,
23                           ret_grid=True)
24    d, grid, field = af_vals
25
26    axes[i].plot(grid[0], grid[1])
27    axes[i].axvline(d, color='k', ls='--')
28    axes[i].set_title(f"Metric {mt}")
29
30fig.suptitle("Comparison of Metrics")
31fig.tight_layout()
32plt.show()