A Python library for AFM, HS-AFM, and Localization AFM data analysis. Based on NanoLocz
Project description
pnanolocz 📦
A Python library for AFM image flattening, background leveling, and edge detection, based on the MATLAB NanoLocz platform. Original NanoLocz MATLAB library is available here: https://github.com/George-R-Heath/NanoLocz-Matlab-Library
🔍 Key Features
- Versatile Leveling: Polynomial plane/line subtraction, median- and log‑based flattening.
- Automated Routines: Multi‑frame “routines” (plane‑line, iterative high/low, Otsu pipelines, etc.).
- Threshold & Edge Masks: Histogram, Otsu, Sobel‑based edges, skeletonization, change‑point line steps.
- 2D & 3D Support: Works on single images
(H,W)or stacks(N,H,W). - Batch‑Ready: Scriptable for high‑speed AFM (HS‑AFM) and localization AFM (LAFM) workflows.
📦 Installation
pip install pnanolocz
Or clone & install locally:
git clone https://github.com/derollins/Python-Nanolocz-Library.git
cd Python-Nanolocz-Library
pip install .
Requirements
This library requires Python 3.11 or newer and uses modern scientific Python packages to replace MATLAB functionality from the original NanoLocz platform:
- NumPy – Core numerical operations and array handling (replaces MATLAB’s matrix operations).
- SciPy – Polynomial fitting, signal processing, and optimization routines (similar to MATLAB’s polyfit, filter, etc.).
- scikit-image – Image processing tools for thresholding, edge detection, and morphological operations (analogous to MATLAB’s Image Processing Toolbox).
- Matplotlib – Visualization of AFM frames and masks (replaces MATLAB’s plotting functions).
- ruptures – Change-point detection for line-step analysis (provides advanced segmentation beyond MATLAB’s built-ins).
- sknw – Skeletonization and graph-based analysis for edge and structure detection.
These libraries allow the Python implementation to match or exceed MATLAB’s capabilities while remaining open-source and easily extensible for AFM workflows.
🚀 Quickstart
import numpy as np
from pnanolocz.level import apply_level
from pnanolocz.level_auto import apply_level_auto
from pnanolocz.thresholder import apply_thresholder
from pnanolocz.level_weighted import apply_weighted_level
# 1) Polynomial plane leveling
img = np.load("frame.npy") # (H,W)
flat = apply_level(img, 2, 2, method="plane")
# 2) Region-weighted line leveling
frames = np.load("frames.npy") # (N,H,W)
mask = thresholder(frames, method="threshold", limits=(1.5, 50))
levelled = apply_weighted_level(frames, 1, 0, method="line", mask=mask)
# 3) Automated multi‑frame pipeline
stack = np.load("stack.npy") # (N,H,W)
out = apply_level_auto(stack, routine="multi-plane-otsu")
# 4) Otsu mask
mask = apply_thresholder(img, method="otsu", limits=None)
📖 Modules
-
pnanolocz.levelCore flattening / leveling (plane, line, median, smoothed, mean, log).Typical usage involves calling the
apply_level()function with an image (2D) or image stack (3D) and specifying the desired method and polynomial orders. (see Quickstart above for an example)Available methods:
| Method | Description |
|---|---|
plane |
Polynomial line + plane subtraction in X and Y (centered fitting). |
line |
Row‑wise and column‑wise polynomial leveling (each line individually). |
med_line |
Row‑wise median line flattening. |
med_line_y |
Column‑wise median flattening. |
smed_line |
Smoothed median line subtraction. |
mean_plane |
Global mean subtraction. |
log_y |
Logarithmic curve subtraction along the Y‑axis. |
-
pnanolocz.level_weightedWeighted-region flattening / leveling (plane, line, median and smoothed).Typical usage involves calling the
apply_weighted_level()function with an image (2D) or image stack (3D) and specifying the desired method and polynomial orders. (see Quickstart above for an example)Available methods:
| Method | Description |
|---|---|
plane |
Region-weighted polynomial plane subtraction in X and Y. |
line |
Region-weighted row/column polynomial leveling. |
med_line |
Region-weighted row-wise median line flattening. |
med_line_y |
Region-weighted column-wise median line flattening. |
smed_line |
Region-weighted smoothed median line subtraction. |
-
pnanolocz.thresholderIntensity / edge detection: histogram, Otsu, auto edges, skeleton, step detection.Typical usage involves calling the
apply_thresholder()function with an image (2D) or image stack (3D) and specifying the desired method and polynomial orders. (see Quickstart above for an example)Available thresholder functions:
| Method | Description |
|---|---|
selection |
Use user-supplied hand-drawn or binary mask. |
histogram |
Threshold by intensity limits. |
otsu |
Otsu's global thresholding method. |
auto_edges |
Detect edges using Sobel gradient and morphological filtering. |
hist_edges |
Detect edges by thresholding with histogram limits and morphological operations. |
otsu_edges |
Detect edges after Otsu thresholding using morphological operations. |
otsu_skel |
Skeletonize regions selected by Otsu thresholding. |
hist_skel |
Skeletonize regions selected by histogram thresholding. |
line_step |
Detect step changes along each row using PELT change point detection. |
pnanolocz.level_autoPre‑defined multi‑frame routines built fromlevel+thresholder.
| Routine | Description |
|---|---|
plane-line |
plane leveling followed by med_line. |
iterative 1nm high |
Plane leveling + high‑side histogram threshold (1 nm) with iterative refinements. |
iterative -1nm low |
Plane leveling + low‑side histogram threshold (−1 nm) with iterative refinements. |
iterative high low |
Plane leveling + symmetric ±1 nm histogram threshold with iterative refinements. |
Line1 + Otsu Line2 |
Single‑pass line leveling, Otsu‑mask, then a second line leveling. |
high-low x2 (fit) |
Two‑stage plane + median line leveling, with Gaussian‑fit histogram threshold in between. |
iterative fit holes |
Iterative plane + median line leveling, masking “holes” via Gaussian‑fit low‑side threshold. |
iterative fit peaks |
Iterative plane + median line leveling, masking “peaks” via Gaussian‑fit high‑side threshold. |
multi-plane-edges |
Iterative plane leveling combined with edge-based masks and region-weighted fits. |
multi-plane-otsu |
Iterative plane leveling guided by Otsu-edge masks for segmentation and background refinement. |
🔗 Links
- Homepage: GitHub Repository Explore the source code, documentation, and examples.
- Issue Tracker: https://github.com/derollins/Python-Nanolocz-Library/issues Use this to submit bug reports, feature requests, or ask questions.
📝 Citation
If you use this library, please cite:
Heath, G.R. et al. NanoLocz: Image analysis platform for AFM, high‑speed AFM and localization AFM. Small Methods 2024, 2301766. https://doi.org/10.1002/smtd.202301766
and
Rollins, D. E., & Heath, G. R. (2025). Python-NanoLocz-Library: A Python implementation of the NanoLocz AFM leveling and analysis tools. University of Leeds. https://github.com/derollins/Python-Nanolocz-Library
⚖️ License
Distributed under the terms of the GNU GPL v3.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pnanolocz-0.1.0.tar.gz.
File metadata
- Download URL: pnanolocz-0.1.0.tar.gz
- Upload date:
- Size: 34.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08c6d3360f7dd3f1145911880a9f6e34539c83b9c62f7cbf2f89de016c748626
|
|
| MD5 |
aac2403c6668b34e174b6524d48784a7
|
|
| BLAKE2b-256 |
3fab6fd9d1bd6b4fca9a61939224d43b74b3f22f78014eb5b893a39d5aad6c40
|
File details
Details for the file pnanolocz-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pnanolocz-0.1.0-py3-none-any.whl
- Upload date:
- Size: 53.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cef107e6689240ef0f3b53ee979ab8d2e853d18024f37cd44fdf38e345fbd0d3
|
|
| MD5 |
949ce8957212909e6b28aeab6ac151d2
|
|
| BLAKE2b-256 |
b9f6b6fe818bd9413cd37bb3f7a87134017013fb9de8d8cf20ff9bc96d855700
|