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>
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()
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()
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()
[ ]: