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.
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.
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()