Nanog timelapse example

Install and import the dependencies

[1]:
%pip uninstall basicpy -yq
%pip install basicpy -q
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
[2]:
from basicpy import BaSiC
from basicpy import data as bdata
from matplotlib import pyplot as plt
the value of the environment variable BASIC_DCT_BACKEND is not in ["JAX","SCIPY"]

Load the sample images

[3]:
images = bdata.timelapse_nanog()
plt.imshow(images[10])
Downloading file 'timelapse_nanog.npz' from 'https://github.com/peng-lab/BaSiCPy/raw/dev/data/timelapse_nanog.npz' to '/home/docs/.cache/basicpy'.
[3]:
<matplotlib.image.AxesImage at 0x7f8e3894faf0>
../_images/notebooks_timelapse_nanog_5_2.png

Fit the flatfield and darkfield (try 1)

[4]:
basic = BaSiC(get_darkfield=True, lambda_flatfield_coef=10)
basic.fit(images)
WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
INFO:basicpy.basicpy:reweighting iteration 0
INFO:basicpy.basicpy:single-step optimization score: 7.678745532757603e-07.
INFO:basicpy.basicpy:mean of S: 1.0.
INFO:basicpy.basicpy:Iteration 0 finished.
INFO:basicpy.basicpy:reweighting iteration 1
INFO:basicpy.basicpy:single-step optimization score: 7.752265105409606e-07.
INFO:basicpy.basicpy:mean of S: 0.9999999403953552.
INFO:basicpy.basicpy:Iteration 1 finished.
INFO:basicpy.basicpy:reweighting score: 0.003535376861691475
INFO:basicpy.basicpy:elapsed time: 8.213936023000315 seconds
INFO:basicpy.basicpy:Reweighting converged.
INFO:basicpy.basicpy:=== BaSiC fit finished in 8.315074793999884 seconds ===

Plot the fit results (try 1)

[5]:
fig, axes = plt.subplots(1, 3, figsize=(9, 3))
im = axes[0].imshow(basic.flatfield)
fig.colorbar(im, ax=axes[0])
axes[0].set_title("Flatfield")
im = axes[1].imshow(basic.darkfield)
fig.colorbar(im, ax=axes[1])
axes[1].set_title("Darkfield")
axes[2].plot(basic.baseline)
axes[2].set_xlabel("Frame")
axes[2].set_ylabel("Baseline")
fig.tight_layout()
../_images/notebooks_timelapse_nanog_9_0.png

Fit the flatfield and darkfield (try 2)

[6]:
basic = BaSiC(
    get_darkfield=True, lambda_flatfield_coef=100
)  # increase lambda_flatfield_coef for smoother flatfield
basic.fit(images)
INFO:basicpy.basicpy:Initializing BaSiC 140248734624448 with parameters:
get_darkfield: True
lambda_flatfield_coef: 100

INFO:basicpy.basicpy:=== BaSiC fit started ===
INFO:basicpy.basicpy:reweighting iteration 0
INFO:basicpy.basicpy:single-step optimization score: 7.597092803734995e-07.
INFO:basicpy.basicpy:mean of S: 1.0000001192092896.
INFO:basicpy.basicpy:Iteration 0 finished.
INFO:basicpy.basicpy:reweighting iteration 1
INFO:basicpy.basicpy:single-step optimization score: 7.214820243461872e-07.
INFO:basicpy.basicpy:mean of S: 1.0.
INFO:basicpy.basicpy:Iteration 1 finished.
INFO:basicpy.basicpy:reweighting score: 0.00407834118232131
INFO:basicpy.basicpy:elapsed time: 6.1004404590003105 seconds
INFO:basicpy.basicpy:Reweighting converged.
INFO:basicpy.basicpy:=== BaSiC fit finished in 6.106918268999834 seconds ===

Plot the fit results (try 2)

[7]:
fig, axes = plt.subplots(1, 3, figsize=(9, 3))
im = axes[0].imshow(basic.flatfield)
fig.colorbar(im, ax=axes[0])
axes[0].set_title("Flatfield")
im = axes[1].imshow(basic.darkfield)
fig.colorbar(im, ax=axes[1])
axes[1].set_title("Darkfield")
axes[2].plot(basic.baseline)
axes[2].set_xlabel("Frame")
axes[2].set_ylabel("Baseline")
fig.tight_layout()
../_images/notebooks_timelapse_nanog_13_0.png

Correct the original images

[8]:
images_transformed = basic.transform(images, timelapse=True)
INFO:basicpy.basicpy:=== BaSiC transform started ===
INFO:basicpy.basicpy:unshading in 2 threads
INFO:basicpy.basicpy:=== BaSiC transform finished in 0.026028551000308653 seconds ===

Plot the corrected results

[9]:
for i in range(0, 21, 5):
    fig, axes = plt.subplots(1, 2, figsize=(6, 3))
    im = axes[0].imshow(images[i])
    fig.colorbar(im, ax=axes[0])
    axes[0].set_title("Original")
    im = axes[1].imshow(images_transformed[i])
    fig.colorbar(im, ax=axes[1])
    axes[1].set_title("Corrected")
    fig.suptitle(f"frame {i}")
    fig.tight_layout()
../_images/notebooks_timelapse_nanog_17_0.png
../_images/notebooks_timelapse_nanog_17_1.png
../_images/notebooks_timelapse_nanog_17_2.png
../_images/notebooks_timelapse_nanog_17_3.png
../_images/notebooks_timelapse_nanog_17_4.png
[ ]: