From a34b1c980ddfe76cf8e0e699ef3e83b54fc44b1d Mon Sep 17 00:00:00 2001 From: matei jordache Date: Mon, 23 Mar 2026 21:52:17 -0700 Subject: [PATCH] add snapshot tool, masks, and build for mac --- GWYDDION_FEATURE_GAP.md | 21 +- README.md | 14 +- backend/execution.py | 18 +- backend/main.py | 2 +- backend/nodes/__init__.py | 2 +- backend/nodes/analysis.py | 146 +++++- backend/nodes/filters.py | 189 ++++++++ backend/nodes/grains.py | 83 +--- backend/nodes/io.py | 81 +++- backend/nodes/mask.py | 273 +++++++++++ backend/runtime_paths.py | 19 +- demo/.gitkeep | 0 demo/nanoparticles.npy | Bin 0 -> 524416 bytes demo/nanoparticles.png | Bin 0 -> 18457 bytes desktop.py | 36 +- frontend/index.html | 2 +- frontend/package-lock.json | 7 + frontend/package.json | 1 + frontend/src/App.jsx | 208 ++++++-- frontend/src/pngMetadata.js | 129 +++++ frontend/src/styles.css | 17 +- package.json | 4 +- pyproject.toml | 8 +- scripts/build-linux.sh | 65 +++ scripts/build-mac.sh | 110 +++++ .../{build-desktop.ps1 => build-windows.ps1} | 6 +- scripts/generate_demo_particles.py | 79 ++++ tests/test_grains.py | 445 ++++++++++++++++++ tests/test_nodes.py | 221 ++++++++- 29 files changed, 2016 insertions(+), 170 deletions(-) create mode 100644 backend/nodes/mask.py create mode 100644 demo/.gitkeep create mode 100644 demo/nanoparticles.npy create mode 100644 demo/nanoparticles.png create mode 100644 frontend/src/pngMetadata.js create mode 100755 scripts/build-linux.sh create mode 100755 scripts/build-mac.sh rename scripts/{build-desktop.ps1 => build-windows.ps1} (86%) create mode 100644 scripts/generate_demo_particles.py create mode 100644 tests/test_grains.py diff --git a/GWYDDION_FEATURE_GAP.md b/GWYDDION_FEATURE_GAP.md index b393f82..762e41a 100644 --- a/GWYDDION_FEATURE_GAP.md +++ b/GWYDDION_FEATURE_GAP.md @@ -1,4 +1,4 @@ -# Gwyddion Features Not Yet in Argonode +# Gwyddion Features Not Yet in argonode Reference for future implementation. Grouped by value to typical SPM workflows. @@ -11,9 +11,9 @@ Reference for future implementation. Grouped by value to typical SPM workflows. | 1 | Line Correction | linecorrect.c, linematch.c | Row-by-row median/polynomial alignment. Essential for raw SPM data with scan-line artifacts. | | 2 | Scar Removal | scars.c | Detect and interpolate scan-line defects (horizontal streaks). | | 3 | Facet Leveling | facet-level.c | Orient the dominant surface facet to horizontal. Better than plane level for terraced/stepped surfaces. | -| 4 | Morphological Mask Ops | mask_morph.c | Erode, dilate, open, close on grain masks. Needed to clean up thresholded masks. | -| 5 | 1D FFT Filter | fft_filter_1d.c | Bandpass/lowpass/highpass filtering of LINE profiles. | -| 6 | 2D FFT Filter | fft_filter_2d.c | Frequency-domain filtering of DATA_FIELDs (remove periodic noise, etc.). | +| ~~4~~ | ~~Morphological Mask Ops~~ | ~~mask_morph.c~~ | ~~Erode, dilate, open, close on grain masks. Needed to clean up thresholded masks.~~ **DONE** | +| ~~5~~ | ~~1D FFT Filter~~ | ~~fft_filter_1d.c~~ | ~~Bandpass/lowpass/highpass filtering of LINE profiles.~~ **DONE** | +| ~~6~~ | ~~2D FFT Filter~~ | ~~fft_filter_2d.c~~ | ~~Frequency-domain filtering of DATA_FIELDs (remove periodic noise, etc.).~~ **DONE** | | 7 | Autocorrelation (ACF) | acf2d.c | 2D autocorrelation function. Reveals periodic structures and correlation lengths. | | 8 | PSDF | psdf2d.c | Radial/2D power spectral density function. Complementary to ACF for roughness characterization. | | 9 | Fractal Dimension | fractal.c | Multiple methods: partitioning, cube counting, triangulation, PSDF, HHCF. Quantifies surface complexity. | @@ -61,11 +61,11 @@ Reference for future implementation. Grouped by value to typical SPM workflows. --- -## Already Implemented in Argonode +## Already Implemented in argonode For reference, these Gwyddion equivalents are already covered: -| Argonode Node | Category | Gwyddion Equivalent | +| argonode Node | Category | Gwyddion Equivalent | |--------------|----------|-------------------| | Load Image / Load SPM File | io | File import (gwy, sxm, ibw) | | Save Image | io | File export | @@ -76,12 +76,17 @@ For reference, these Gwyddion equivalents are already covered: | Gaussian Filter | filters | filters.c (gaussian) | | Median Filter | filters | filters.c (median) | | Edge Detect | filters | edge.c (sobel, prewitt, laplacian, LoG) | +| 1D FFT Filter | filters | fft_filter_1d.c (lowpass, highpass, bandpass, notch) | +| 2D FFT Filter | filters | fft_filter_2d.c (lowpass, highpass, bandpass, notch) | | Statistics | analysis | stats.c | | Height Histogram | analysis | linestats.c (dh) | | 2D FFT | analysis | fft.c | | Cross Section | analysis | profile tool | | Profile Roughness | analysis | roughness.c (Ra, Rq, Rsk, Rku, Rp, Rv, Rt) | | Line Math | analysis | linestats.c | -| Threshold Mask | grains | threshold.c, otsu_threshold.c | -| Grain Analysis | grains | grain_stat.c | +| Threshold Mask | mask | threshold.c, otsu_threshold.c | +| Mask Morphology | mask | mask_morph.c (erode, dilate, open, close) | +| Mask Invert | mask | — | +| Mask Combine | mask | — (boolean AND, OR, XOR, subtract) | +| Particle Analysis | grains | grain_stat.c | | Preview / 3D View / Print Table | display | Presentation, 3D view | diff --git a/README.md b/README.md index f3902a5..999d091 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Argonode +# argonode -Argonode is a node-based image analysis application with: +argonode is a node-based image analysis application with: - a Python backend built on `aiohttp` - a React + Vite frontend @@ -135,13 +135,13 @@ powershell -ExecutionPolicy Bypass -File scripts\build-desktop.ps1 The packaged app is written to: ```text -desktop-dist/Argonode/ +desktop-dist/argonode/ ``` Main executable: ```text -desktop-dist/Argonode/Argonode.exe +desktop-dist/argonode/argonode.exe ``` ### One-File Build @@ -161,14 +161,14 @@ During normal source-based development, input/output folders live under the repo In the packaged desktop app, writable data is stored under: ```text -%LOCALAPPDATA%\Argonode\ +%LOCALAPPDATA%\argonode\ ``` Specifically: ```text -%LOCALAPPDATA%\Argonode\input -%LOCALAPPDATA%\Argonode\output +%LOCALAPPDATA%\argonode\input +%LOCALAPPDATA%\argonode\output ``` You can override the packaged app data directory with: diff --git a/backend/execution.py b/backend/execution.py index cb11b62..b9a52af 100644 --- a/backend/execution.py +++ b/backend/execution.py @@ -177,13 +177,19 @@ class ExecutionEngine: ) -> None: """Wire up broadcast callbacks on display node classes.""" from backend.nodes.display import PreviewImage, PrintTable, View3D - from backend.nodes.analysis import CrossSection + from backend.nodes.analysis import CrossSection, LineCursors + from backend.nodes.mask import ThresholdMask, MaskMorphology, MaskInvert, MaskCombine from backend.nodes.io import SaveImage PreviewImage._broadcast_fn = on_preview + ThresholdMask._broadcast_fn = on_preview + MaskMorphology._broadcast_fn = on_preview + MaskInvert._broadcast_fn = on_preview + MaskCombine._broadcast_fn = on_preview View3D._broadcast_mesh_fn = on_mesh PrintTable._broadcast_table_fn = on_table CrossSection._broadcast_overlay_fn = on_overlay + LineCursors._broadcast_overlay_fn = on_overlay SaveImage._broadcast_preview = ( (lambda data_uri: on_preview("save", data_uri)) if on_preview else None ) @@ -191,8 +197,10 @@ class ExecutionEngine: def _set_node_id_on_display(self, cls: type, node_id: str) -> None: """Inform display nodes of their current node_id for WS tagging.""" from backend.nodes.display import PreviewImage, PrintTable, View3D - from backend.nodes.analysis import CrossSection - if cls in (PreviewImage, PrintTable, View3D, CrossSection): + from backend.nodes.analysis import CrossSection, LineCursors + from backend.nodes.mask import ThresholdMask, MaskMorphology, MaskInvert, MaskCombine + if cls in (PreviewImage, PrintTable, View3D, CrossSection, LineCursors, + ThresholdMask, MaskMorphology, MaskInvert, MaskCombine): cls._current_node_id = node_id def _auto_preview( @@ -206,12 +214,16 @@ class ExecutionEngine: """ After every node executes, inspect its outputs and broadcast a preview for the first DATA_FIELD, IMAGE, or TABLE found. + Skip nodes that broadcast their own custom preview. """ import numpy as np from backend.data_types import ( DataField, datafield_to_uint8, image_to_uint8, encode_preview, ) + if getattr(cls, "_CUSTOM_PREVIEW", False): + return + return_types = getattr(cls, "RETURN_TYPES", ()) for slot, type_name in enumerate(return_types): diff --git a/backend/main.py b/backend/main.py index 657bd14..ad8bc28 100644 --- a/backend/main.py +++ b/backend/main.py @@ -36,7 +36,7 @@ def main() -> None: app = create_app(loop) log.info("=" * 60) - log.info(" Argonode — Node-based image analysis") + log.info(" argonode — Node-based image analysis") log.info(" Open your browser at http://%s:%d", HOST, PORT) log.info("=" * 60) diff --git a/backend/nodes/__init__.py b/backend/nodes/__init__.py index 588daa7..cae9bb6 100644 --- a/backend/nodes/__init__.py +++ b/backend/nodes/__init__.py @@ -1,2 +1,2 @@ # Import all node modules to trigger @register_node decorators. -from . import io, filters, level, analysis, grains, display +from . import io, filters, level, analysis, grains, mask, display diff --git a/backend/nodes/analysis.py b/backend/nodes/analysis.py index d112a95..60c6b30 100644 --- a/backend/nodes/analysis.py +++ b/backend/nodes/analysis.py @@ -69,6 +69,7 @@ class HeightHistogram: "required": { "field": ("DATA_FIELD",), "n_bins": ("INT", {"default": 256, "min": 10, "max": 1000, "step": 1}), + "y_scale": (["linear", "log"],), } } @@ -78,13 +79,150 @@ class HeightHistogram: CATEGORY = "analysis" DESCRIPTION = ( "Compute the height distribution histogram (DH). " + "Use log scale to reveal small peaks next to a dominant background. " "Equivalent to gwy_data_field_dh." ) - def process(self, field: DataField, n_bins: int) -> tuple: + def process(self, field: DataField, n_bins: int, y_scale: str = "linear") -> tuple: counts, bin_edges = np.histogram(field.data.ravel(), bins=int(n_bins)) bin_centers = 0.5 * (bin_edges[:-1] + bin_edges[1:]) - return (counts.astype(np.float64), bin_centers) + counts = counts.astype(np.float64) + if y_scale == "log": + counts = np.log10(1.0 + counts) + return (counts, bin_centers) + + +# --------------------------------------------------------------------------- +# LineCursors — interactive measurement cursors on any LINE plot +# --------------------------------------------------------------------------- + +@register_node(display_name="Line Cursors") +class LineCursors: + """Place two draggable cursors on any LINE plot to measure values and deltas.""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "line": ("LINE",), + "x1": ("FLOAT", {"default": 0.25, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), + "y1": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), + "x2": ("FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), + "y2": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), + }, + "optional": { + "x_axis": ("LINE",), + }, + } + + RETURN_TYPES = ("TABLE",) + RETURN_NAMES = ("measurement",) + FUNCTION = "process" + CATEGORY = "analysis" + DESCRIPTION = ( + "Place two cursors on any line plot (histogram, cross section, profile) " + "to measure positions, values, and deltas. Drag the markers to reposition." + ) + + _broadcast_overlay_fn = None + _current_node_id: str = "" + + def process( + self, line, x1: float, y1: float, x2: float, y2: float, + x_axis=None, + ) -> tuple: + import io as _io + import base64 + import matplotlib + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + y = np.asarray(line, dtype=np.float64).ravel() + n = len(y) + if x_axis is not None: + x = np.asarray(x_axis, dtype=np.float64).ravel()[:n] + else: + x = np.arange(n, dtype=np.float64) + + # --- Render the base plot first to determine axes bounds --- + fig, ax = plt.subplots(figsize=(3.2, 2.2), dpi=100) + fig.patch.set_facecolor("#1e293b") + ax.set_facecolor("#0f172a") + ax.plot(x, y, color="#ff9800", linewidth=1.2) + ax.tick_params(colors="#94a3b8", labelsize=7) + for spine in ax.spines.values(): + spine.set_color("#334155") + ax.grid(True, color="#334155", linewidth=0.3, alpha=0.5) + fig.tight_layout(pad=0.4) + + # Force a draw so transforms are valid + fig.canvas.draw() + + # Get axes position in figure-fraction coordinates + ax_pos = ax.get_position() + ax_l, ax_b = ax_pos.x0, ax_pos.y0 + ax_w, ax_h = ax_pos.width, ax_pos.height + + # x1/y1 arrive as image-fraction from the frontend drag. + # Convert image-fraction x → axes-fraction → nearest data index. + def img_x_to_idx(ix): + axes_frac = np.clip((ix - ax_l) / ax_w, 0, 1) + return int(np.clip(round(axes_frac * (n - 1)), 0, n - 1)) + + idx_a = img_x_to_idx(x1) + idx_b = img_x_to_idx(x2) + + xa, ya = float(x[idx_a]), float(y[idx_a]) + xb, yb = float(x[idx_b]), float(y[idx_b]) + + # --- Draw cursor lines and markers on the plot --- + ax.axvline(xa, color="#ffd700", linewidth=1.5, linestyle="--", alpha=0.9) + ax.axvline(xb, color="#ffd700", linewidth=1.5, linestyle="--", alpha=0.9) + ax.plot(xa, ya, "o", color="#ffd700", markersize=6, zorder=5) + ax.plot(xb, yb, "o", color="#ffd700", markersize=6, zorder=5) + ax.annotate( + "", xy=(xb, yb), xytext=(xa, ya), + arrowprops=dict(arrowstyle="<->", color="#90caf9", lw=1.5), + ) + + # --- Broadcast overlay --- + if LineCursors._broadcast_overlay_fn is not None: + # Convert data-space positions back to image-fraction for markers + fig.canvas.draw() + inv = fig.transFigure.inverted() + fig_a = inv.transform(ax.transData.transform([xa, ya])) + fig_b = inv.transform(ax.transData.transform([xb, yb])) + + buf = _io.BytesIO() + fig.savefig(buf, format="png", facecolor=fig.get_facecolor()) + buf.seek(0) + image_uri = "data:image/png;base64," + base64.b64encode(buf.read()).decode() + + LineCursors._broadcast_overlay_fn( + LineCursors._current_node_id, + { + "image": image_uri, + "x1": float(fig_a[0]), + "y1": float(1.0 - fig_a[1]), # flip: image y=0 is top + "x2": float(fig_b[0]), + "y2": float(1.0 - fig_b[1]), + "a_locked": False, + "b_locked": False, + }, + ) + + plt.close(fig) + + # --- Output table --- + table = [ + {"quantity": "A position", "value": xa, "unit": ""}, + {"quantity": "A value", "value": ya, "unit": ""}, + {"quantity": "B position", "value": xb, "unit": ""}, + {"quantity": "B value", "value": yb, "unit": ""}, + {"quantity": "delta X", "value": xb - xa, "unit": ""}, + {"quantity": "delta Y", "value": yb - ya, "unit": ""}, + ] + return (table,) # --------------------------------------------------------------------------- @@ -242,9 +380,9 @@ class CrossSection: return { "required": { "field": ("DATA_FIELD",), - "x1": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), + "x1": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), "y1": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), - "x2": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), + "x2": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), "y2": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "hidden": True}), "extend": (["none", "to_edges"],), "n_samples": ("INT", {"default": 0, "min": 0, "max": 4096, "step": 1}), diff --git a/backend/nodes/filters.py b/backend/nodes/filters.py index 783a04b..8a5f872 100644 --- a/backend/nodes/filters.py +++ b/backend/nodes/filters.py @@ -5,6 +5,8 @@ Gwyddion equivalents: GaussianFilter → gwy_data_field_filter_gaussian MedianFilter → gwy_data_field_filter_median EdgeDetect → gwy_data_field_filter_sobel / laplacian / log + FFTFilter1D → fft_filter_1d.c (bandpass/lowpass/highpass on LINE profiles) + FFTFilter2D → fft_filter_2d.c (frequency-domain filtering of DATA_FIELDs) """ from __future__ import annotations @@ -113,3 +115,190 @@ class EdgeDetect: raise ValueError(f"Unknown edge detection method: {method}") return (field.replace(data=result),) + + +# --------------------------------------------------------------------------- +# Butterworth transfer function helpers +# --------------------------------------------------------------------------- + +def _butterworth_lp(freq: np.ndarray, cutoff: float, order: int) -> np.ndarray: + """Butterworth lowpass: H = 1 / (1 + (f/fc)^(2n)).""" + with np.errstate(divide="ignore", over="ignore"): + return 1.0 / (1.0 + (freq / cutoff) ** (2 * order)) + + +def _butterworth_hp(freq: np.ndarray, cutoff: float, order: int) -> np.ndarray: + """Butterworth highpass: H = 1 / (1 + (fc/f)^(2n)).""" + with np.errstate(divide="ignore", invalid="ignore"): + h = 1.0 / (1.0 + (cutoff / freq) ** (2 * order)) + h = np.where(np.isfinite(h), h, 0.0) + return h + + +def _build_1d_transfer(n: int, filter_type: str, cutoff: float, + cutoff_high: float, order: int) -> np.ndarray: + """Build a 1-D transfer function for an FFT of length *n*. + + Frequencies are normalised so that 1.0 = Nyquist (fs/2). + The returned array has the same layout as np.fft.rfft output (length n//2+1). + """ + freq = np.linspace(0, 1, n // 2 + 1) + + if filter_type == "lowpass": + H = _butterworth_lp(freq, cutoff, order) + elif filter_type == "highpass": + H = _butterworth_hp(freq, cutoff, order) + elif filter_type == "bandpass": + H = _butterworth_hp(freq, cutoff, order) * _butterworth_lp(freq, cutoff_high, order) + elif filter_type == "notch": + bp = _butterworth_hp(freq, cutoff, order) * _butterworth_lp(freq, cutoff_high, order) + H = 1.0 - bp + else: + H = np.ones_like(freq) + return H + + +# --------------------------------------------------------------------------- +# FFTFilter1D — frequency-domain filtering of LINE profiles +# --------------------------------------------------------------------------- + +@register_node(display_name="1D FFT Filter") +class FFTFilter1D: + """Bandpass / lowpass / highpass / notch filtering of 1-D line profiles. + + Equivalent to Gwyddion's fft_filter_1d module. Uses a Butterworth + transfer function with configurable order for a smooth roll-off. + """ + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "line": ("LINE",), + "filter_type": (["lowpass", "highpass", "bandpass", "notch"],), + "cutoff": ("FLOAT", { + "default": 0.1, "min": 0.001, "max": 1.0, "step": 0.001, + }), + "cutoff_high": ("FLOAT", { + "default": 0.4, "min": 0.001, "max": 1.0, "step": 0.001, + }), + "order": ("INT", {"default": 2, "min": 1, "max": 10, "step": 1}), + } + } + + RETURN_TYPES = ("LINE",) + RETURN_NAMES = ("filtered",) + FUNCTION = "process" + CATEGORY = "filters" + DESCRIPTION = ( + "Frequency-domain filtering of a 1-D line profile. " + "Supports lowpass, highpass, bandpass, and notch (band-reject) modes " + "with a Butterworth roll-off. Cutoffs are fractions of the Nyquist frequency. " + "Equivalent to Gwyddion fft_filter_1d." + ) + + def process(self, line, filter_type: str, cutoff: float, + cutoff_high: float, order: int) -> tuple: + z = np.asarray(line, dtype=np.float64).ravel() + n = len(z) + + # Forward FFT (real-valued) + Z = np.fft.rfft(z) + + # Build and apply transfer function + H = _build_1d_transfer(n, filter_type, cutoff, cutoff_high, order) + Z *= H + + # Inverse FFT + filtered = np.fft.irfft(Z, n=n) + return (filtered,) + + +# --------------------------------------------------------------------------- +# FFTFilter2D — frequency-domain filtering of DATA_FIELDs +# --------------------------------------------------------------------------- + +@register_node(display_name="2D FFT Filter") +class FFTFilter2D: + """Frequency-domain filtering of 2-D data fields (images). + + Equivalent to Gwyddion's fft_filter_2d module. Applies a radial + Butterworth transfer function in the frequency domain to remove or + isolate periodic features. + """ + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "field": ("DATA_FIELD",), + "filter_type": (["lowpass", "highpass", "bandpass", "notch"],), + "cutoff": ("FLOAT", { + "default": 0.1, "min": 0.001, "max": 1.0, "step": 0.001, + }), + "cutoff_high": ("FLOAT", { + "default": 0.4, "min": 0.001, "max": 1.0, "step": 0.001, + }), + "order": ("INT", {"default": 2, "min": 1, "max": 10, "step": 1}), + } + } + + RETURN_TYPES = ("DATA_FIELD",) + RETURN_NAMES = ("filtered",) + FUNCTION = "process" + CATEGORY = "filters" + DESCRIPTION = ( + "Frequency-domain filtering of a 2-D data field. " + "Supports lowpass, highpass, bandpass, and notch (band-reject) modes " + "with a radial Butterworth roll-off. Cutoffs are fractions of the " + "Nyquist frequency. Use lowpass to smooth, highpass to sharpen, or " + "bandpass/notch to isolate or remove periodic noise. " + "Equivalent to Gwyddion fft_filter_2d." + ) + + def process(self, field: DataField, filter_type: str, cutoff: float, + cutoff_high: float, order: int) -> tuple: + data = field.data.copy() + yres, xres = data.shape + + # Subtract mean to avoid DC leakage artefacts + mean_val = data.mean() + data -= mean_val + + # Forward 2D FFT + F = np.fft.fft2(data) + F = np.fft.fftshift(F) + + # Build radial frequency grid normalised to [0, 1] (1 = Nyquist) + fy = np.fft.fftshift(np.fft.fftfreq(yres)) # range [-0.5, 0.5) + fx = np.fft.fftshift(np.fft.fftfreq(xres)) + FX, FY = np.meshgrid(fx, fy) + # Normalise so that corner = 1 in each axis independently, + # then take Euclidean norm; max radial value = 1.0 at Nyquist. + R = np.sqrt((FX / 0.5) ** 2 + (FY / 0.5) ** 2) + R = np.clip(R / R.max(), 0, 1) if R.max() > 0 else R + + # Build transfer function + if filter_type == "lowpass": + H = _butterworth_lp(R, cutoff, order) + elif filter_type == "highpass": + H = _butterworth_hp(R, cutoff, order) + elif filter_type == "bandpass": + H = _butterworth_hp(R, cutoff, order) * _butterworth_lp(R, cutoff_high, order) + elif filter_type == "notch": + bp = _butterworth_hp(R, cutoff, order) * _butterworth_lp(R, cutoff_high, order) + H = 1.0 - bp + else: + H = np.ones_like(R) + + # Apply filter + F *= H + + # Inverse FFT + F = np.fft.ifftshift(F) + result = np.fft.ifft2(F).real + + # Restore DC + result += mean_val + + return (field.replace(data=result),) diff --git a/backend/nodes/grains.py b/backend/nodes/grains.py index 6228955..7ef5219 100644 --- a/backend/nodes/grains.py +++ b/backend/nodes/grains.py @@ -1,9 +1,8 @@ """ -Grain/feature detection nodes. +Particle detection nodes. Gwyddion equivalents: - ThresholdMask → threshold.c / otsu_threshold.c - GrainAnalysis → gwy_data_field_grains_get_values (grains-values.c) + ParticleAnalysis → gwy_data_field_grains_get_values (grains-values.c) """ from __future__ import annotations @@ -13,61 +12,11 @@ from backend.data_types import DataField # --------------------------------------------------------------------------- -# ThresholdMask +# ParticleAnalysis # --------------------------------------------------------------------------- -@register_node(display_name="Threshold Mask") -class ThresholdMask: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "field": ("DATA_FIELD",), - "method": (["otsu", "absolute", "relative"],), - "threshold": ("FLOAT", {"default": 0.0, "min": -1e9, "max": 1e9, "step": 0.001}), - "direction": (["above", "below"],), - } - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("mask",) - FUNCTION = "process" - CATEGORY = "grains" - DESCRIPTION = ( - "Create a binary mask by thresholding data. " - "Otsu automatically finds the optimal threshold. " - "Equivalent to Gwyddion's threshold and otsu_threshold modules." - ) - - def process(self, field: DataField, method: str, threshold: float, direction: str) -> tuple: - data = field.data - - if method == "otsu": - from skimage.filters import threshold_otsu - t = threshold_otsu(data) - elif method == "absolute": - t = float(threshold) - elif method == "relative": - # threshold is a fraction [0, 1] of the data range - dmin, dmax = data.min(), data.max() - t = dmin + float(threshold) * (dmax - dmin) - else: - raise ValueError(f"Unknown threshold method: {method}") - - if direction == "above": - mask = (data >= t).astype(np.uint8) * 255 - else: - mask = (data < t).astype(np.uint8) * 255 - - return (mask,) - - -# --------------------------------------------------------------------------- -# GrainAnalysis -# --------------------------------------------------------------------------- - -@register_node(display_name="Grain Analysis") -class GrainAnalysis: +@register_node(display_name="Particle Analysis") +class ParticleAnalysis: @classmethod def INPUT_TYPES(cls): return { @@ -79,43 +28,43 @@ class GrainAnalysis: } RETURN_TYPES = ("TABLE",) - RETURN_NAMES = ("grain_stats",) + RETURN_NAMES = ("particle_stats",) FUNCTION = "process" CATEGORY = "grains" DESCRIPTION = ( - "Label connected grain regions in a binary mask and compute per-grain statistics: " - "area, equivalent diameter, mean/max height, bounding box. " + "Label connected particle regions in a binary mask and compute per-particle " + "statistics: area, equivalent diameter, mean/max height, bounding box. " "Equivalent to gwy_data_field_grains_get_values." ) def process(self, field: DataField, mask: np.ndarray, min_size: int) -> tuple: - from scipy.ndimage import label, find_objects + from scipy.ndimage import label binary = (mask > 127).astype(np.int32) - labeled, n_grains = label(binary) + labeled, n_particles = label(binary) pixel_area = field.dx * field.dy # m^2 per pixel rows = [] - for grain_id in range(1, n_grains + 1): - grain_pixels = labeled == grain_id - area_px = int(grain_pixels.sum()) + for pid in range(1, n_particles + 1): + particle_pixels = labeled == pid + area_px = int(particle_pixels.sum()) if area_px < min_size: continue area_m2 = area_px * pixel_area equiv_diam = float(2.0 * np.sqrt(area_m2 / np.pi)) - heights = field.data[grain_pixels] + heights = field.data[particle_pixels] mean_h = float(heights.mean()) max_h = float(heights.max()) # Bounding box - ys, xs = np.where(grain_pixels) + ys, xs = np.where(particle_pixels) bbox = f"({int(xs.min())},{int(ys.min())})-({int(xs.max())},{int(ys.max())})" rows.append({ - "grain_id": grain_id, + "particle_id": pid, "area_px": area_px, "area_m2": area_m2, "equiv_diam_m": equiv_diam, diff --git a/backend/nodes/io.py b/backend/nodes/io.py index 40cfae9..7a44f46 100644 --- a/backend/nodes/io.py +++ b/backend/nodes/io.py @@ -9,12 +9,16 @@ from pathlib import Path from backend.node_registry import register_node from backend.data_types import DataField, encode_preview, image_to_uint8 -from backend.runtime_paths import input_dir, output_dir +from backend.runtime_paths import demo_dir, input_dir, output_dir # Resolved at server startup so nodes know where to look +DEMO_DIR = demo_dir() INPUT_DIR = input_dir() OUTPUT_DIR = output_dir() +_DEMO_EXTENSIONS = {".png", ".jpg", ".jpeg", ".tiff", ".tif", ".npy", ".npz", + ".gwy", ".sxm", ".ibw"} + # --------------------------------------------------------------------------- # LoadImage @@ -68,6 +72,81 @@ class LoadImage: return (arr, field) +# --------------------------------------------------------------------------- +# LoadDemo +# --------------------------------------------------------------------------- + +def _list_demo_files() -> list[str]: + """Return sorted list of demo filenames available in the demo/ directory.""" + if not DEMO_DIR.exists(): + return [] + return sorted( + f.name for f in DEMO_DIR.iterdir() + if f.is_file() and not f.name.startswith(".") and f.suffix.lower() in _DEMO_EXTENSIONS + ) + + +@register_node(display_name="Load Demo Image") +class LoadDemo: + @classmethod + def INPUT_TYPES(cls): + choices = _list_demo_files() or ["(no demo images found)"] + return { + "required": { + "name": (choices,), + } + } + + RETURN_TYPES = ("IMAGE", "DATA_FIELD") + RETURN_NAMES = ("image", "field") + FUNCTION = "load" + CATEGORY = "io" + DESCRIPTION = "Load a bundled demo image so you can try the app without providing your own data." + + def load(self, name: str): + path = DEMO_DIR / name + if not path.exists(): + raise FileNotFoundError(f"Demo image not found: {name}") + + ext = path.suffix.lower() + + # SPM formats → delegate to LoadSPM-style loading, return as IMAGE + DATA_FIELD + if ext == ".gwy": + field = LoadSPM()._load_gwy(path, "Z") + arr = field.data + return (arr, field) + elif ext == ".sxm": + field = LoadSPM()._load_sxm(path, "Z") + arr = field.data + return (arr, field) + elif ext == ".ibw": + field = LoadSPM()._load_ibw(path) + arr = field.data + return (arr, field) + + # npy / npz + if ext == ".npy": + arr = np.load(str(path)).astype(np.float64) + elif ext == ".npz": + npz = np.load(str(path)) + key = list(npz.files)[0] + arr = npz[key].astype(np.float64) + else: + from PIL import Image + img = Image.open(str(path)) + arr = np.array(img) + if arr.dtype != np.uint8: + arr = arr.astype(np.float64) + + if arr.ndim == 3: + gray = np.mean(arr.astype(np.float64), axis=2) + else: + gray = arr.astype(np.float64) + + field = DataField(data=gray) + return (arr, field) + + # --------------------------------------------------------------------------- # LoadSPM # --------------------------------------------------------------------------- diff --git a/backend/nodes/mask.py b/backend/nodes/mask.py new file mode 100644 index 0000000..9203488 --- /dev/null +++ b/backend/nodes/mask.py @@ -0,0 +1,273 @@ +""" +Mask operation nodes — creation, morphology, and boolean combination. + +Gwyddion equivalents: + ThresholdMask → threshold.c / otsu_threshold.c + MaskMorphology → mask_morph.c (erode, dilate, open, close) + MaskInvert → (bitwise NOT on mask) + MaskCombine → (boolean ops between two masks) +""" + +from __future__ import annotations +import numpy as np +from backend.node_registry import register_node +from backend.data_types import DataField, datafield_to_uint8, encode_preview + + +def _mask_overlay(field: DataField, mask: np.ndarray) -> np.ndarray: + """Render greyscale base image with red shadow on masked (255) pixels. + + Returns (H, W, 3) uint8 array. + """ + grey = datafield_to_uint8(field, "gray") # (H, W, 3) uint8 + overlay = grey.astype(np.float64) + mask_bool = mask == 255 + alpha = 0.45 + overlay[mask_bool, 0] = overlay[mask_bool, 0] * (1 - alpha) + 255 * alpha + overlay[mask_bool, 1] = overlay[mask_bool, 1] * (1 - alpha) + overlay[mask_bool, 2] = overlay[mask_bool, 2] * (1 - alpha) + return np.clip(overlay, 0, 255).astype(np.uint8) + + +# --------------------------------------------------------------------------- +# ThresholdMask +# --------------------------------------------------------------------------- + +@register_node(display_name="Threshold Mask") +class ThresholdMask: + _CUSTOM_PREVIEW = True + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "field": ("DATA_FIELD",), + "method": (["otsu", "absolute", "relative"],), + "threshold": ("FLOAT", {"default": 0.0, "min": -1e9, "max": 1e9, "step": 0.001}), + "direction": (["above", "below"],), + } + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("mask",) + FUNCTION = "process" + CATEGORY = "mask" + DESCRIPTION = ( + "Create a binary mask by thresholding data. " + "Otsu automatically finds the optimal threshold. " + "Equivalent to Gwyddion's threshold and otsu_threshold modules." + ) + + _broadcast_fn = None + _current_node_id: str = "" + + def process(self, field: DataField, method: str, threshold: float, direction: str) -> tuple: + data = field.data + + if method == "otsu": + from skimage.filters import threshold_otsu + t = threshold_otsu(data) + elif method == "absolute": + t = float(threshold) + elif method == "relative": + # threshold is a fraction [0, 1] of the data range + dmin, dmax = data.min(), data.max() + t = dmin + float(threshold) * (dmax - dmin) + else: + raise ValueError(f"Unknown threshold method: {method}") + + if direction == "above": + mask = (data >= t).astype(np.uint8) * 255 + else: + mask = (data < t).astype(np.uint8) * 255 + + if ThresholdMask._broadcast_fn is not None: + overlay = _mask_overlay(field, mask) + ThresholdMask._broadcast_fn( + ThresholdMask._current_node_id, encode_preview(overlay), + ) + + return (mask,) + + +# --------------------------------------------------------------------------- +# MaskMorphology +# --------------------------------------------------------------------------- + +@register_node(display_name="Mask Morphology") +class MaskMorphology: + """Morphological operations on binary masks. + + Equivalent to Gwyddion's mask_morph.c (erode, dilate, open, close). + """ + _CUSTOM_PREVIEW = True + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("IMAGE",), + "operation": (["dilate", "erode", "open", "close"],), + "radius": ("INT", {"default": 1, "min": 1, "max": 50, "step": 1}), + "shape": (["disk", "square"],), + }, + "optional": { + "field": ("DATA_FIELD",), + } + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("mask",) + FUNCTION = "process" + CATEGORY = "mask" + DESCRIPTION = ( + "Apply morphological operations to a binary mask. " + "Dilate expands regions, erode shrinks them, " + "open (erode then dilate) removes small spots, " + "close (dilate then erode) fills small holes. " + "Equivalent to Gwyddion mask_morph." + ) + + _broadcast_fn = None + _current_node_id: str = "" + + def process(self, mask: np.ndarray, operation: str, radius: int, shape: str, + field: DataField | None = None) -> tuple: + from scipy.ndimage import binary_dilation, binary_erosion + + binary = mask > 127 + + if shape == "disk": + y, x = np.ogrid[-radius:radius + 1, -radius:radius + 1] + struct = (x * x + y * y) <= radius * radius + else: + size = 2 * radius + 1 + struct = np.ones((size, size), dtype=bool) + + if operation == "dilate": + result = binary_dilation(binary, structure=struct) + elif operation == "erode": + result = binary_erosion(binary, structure=struct) + elif operation == "open": + result = binary_dilation( + binary_erosion(binary, structure=struct), + structure=struct, + ) + elif operation == "close": + result = binary_erosion( + binary_dilation(binary, structure=struct), + structure=struct, + ) + else: + raise ValueError(f"Unknown morphological operation: {operation}") + + out = result.astype(np.uint8) * 255 + + if field is not None and MaskMorphology._broadcast_fn is not None: + overlay = _mask_overlay(field, out) + MaskMorphology._broadcast_fn( + MaskMorphology._current_node_id, encode_preview(overlay), + ) + + return (out,) + + +# --------------------------------------------------------------------------- +# MaskInvert +# --------------------------------------------------------------------------- + +@register_node(display_name="Mask Invert") +class MaskInvert: + _CUSTOM_PREVIEW = True + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("IMAGE",), + }, + "optional": { + "field": ("DATA_FIELD",), + } + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("mask",) + FUNCTION = "process" + CATEGORY = "mask" + DESCRIPTION = "Invert a binary mask — swap masked and unmasked regions." + + _broadcast_fn = None + _current_node_id: str = "" + + def process(self, mask: np.ndarray, field: DataField | None = None) -> tuple: + out = np.where(mask > 127, np.uint8(0), np.uint8(255)) + + if field is not None and MaskInvert._broadcast_fn is not None: + overlay = _mask_overlay(field, out) + MaskInvert._broadcast_fn( + MaskInvert._current_node_id, encode_preview(overlay), + ) + + return (out,) + + +# --------------------------------------------------------------------------- +# MaskCombine +# --------------------------------------------------------------------------- + +@register_node(display_name="Mask Combine") +class MaskCombine: + _CUSTOM_PREVIEW = True + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask_a": ("IMAGE",), + "mask_b": ("IMAGE",), + "operation": (["and", "or", "xor", "subtract"],), + }, + "optional": { + "field": ("DATA_FIELD",), + } + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("mask",) + FUNCTION = "process" + CATEGORY = "mask" + DESCRIPTION = ( + "Combine two binary masks with a boolean operation. " + "AND keeps overlap, OR merges, XOR keeps non-overlapping regions, " + "subtract removes mask_b from mask_a." + ) + + _broadcast_fn = None + _current_node_id: str = "" + + def process(self, mask_a: np.ndarray, mask_b: np.ndarray, operation: str, + field: DataField | None = None) -> tuple: + a = mask_a > 127 + b = mask_b > 127 + + if operation == "and": + result = a & b + elif operation == "or": + result = a | b + elif operation == "xor": + result = a ^ b + elif operation == "subtract": + result = a & ~b + else: + raise ValueError(f"Unknown mask operation: {operation}") + + out = result.astype(np.uint8) * 255 + + if field is not None and MaskCombine._broadcast_fn is not None: + overlay = _mask_overlay(field, out) + MaskCombine._broadcast_fn( + MaskCombine._current_node_id, encode_preview(overlay), + ) + + return (out,) diff --git a/backend/runtime_paths.py b/backend/runtime_paths.py index bab42db..7ddbe72 100644 --- a/backend/runtime_paths.py +++ b/backend/runtime_paths.py @@ -4,7 +4,7 @@ import os import sys from pathlib import Path -APP_NAME = "Argonode" +APP_NAME = "argonode" def project_root() -> Path: @@ -34,13 +34,26 @@ def app_data_dir() -> Path: return Path(override).expanduser().resolve() if getattr(sys, "frozen", False): - local_appdata = os.getenv("LOCALAPPDATA") - base_dir = Path(local_appdata) if local_appdata else Path.home() / "AppData" / "Local" + if sys.platform == "darwin": + base_dir = Path.home() / "Library" / "Application Support" + elif sys.platform == "linux": + xdg = os.getenv("XDG_DATA_HOME") + base_dir = Path(xdg) if xdg else Path.home() / ".local" / "share" + else: + local_appdata = os.getenv("LOCALAPPDATA") + base_dir = Path(local_appdata) if local_appdata else Path.home() / "AppData" / "Local" return (base_dir / APP_NAME).resolve() return project_root() +def demo_dir() -> Path: + bundled = resource_root() / "demo" + if bundled.exists(): + return bundled + return project_root() / "demo" + + def input_dir() -> Path: return app_data_dir() / "input" diff --git a/demo/.gitkeep b/demo/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/demo/nanoparticles.npy b/demo/nanoparticles.npy new file mode 100644 index 0000000000000000000000000000000000000000..d679672ff6df5d4e88b58722d2ba227319748539 GIT binary patch literal 524416 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 literal 0 HcmV?d00001 diff --git a/demo/nanoparticles.png b/demo/nanoparticles.png new file mode 100644 index 0000000000000000000000000000000000000000..dda620472092e3d5eb5540e48d95ca84321ae83b GIT binary patch literal 18457 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

`CGGz5*sBhTt14BpiiuObALy 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 str | None: + """Open a native file picker and return the selected path (or None).""" + win = self._window_ref[0] + if win is None: + return None + result = win.create_file_dialog( + webview.OPEN_DIALOG, + allow_multiple=False, + file_types=( + "All supported (*.png;*.jpg;*.jpeg;*.tiff;*.tif;*.npy;*.npz;*.gwy;*.sxm;*.ibw)", + "Images (*.png;*.jpg;*.jpeg;*.tiff;*.tif)", + "NumPy (*.npy;*.npz)", + "SPM (*.gwy;*.sxm;*.ibw)", + "All files (*.*)", + ), + ) + if result and len(result) > 0: + return result[0] + return None def _pick_free_port() -> int: @@ -85,17 +112,22 @@ def main() -> None: ready.wait(timeout=15.0) if "error" in state: - raise RuntimeError("Argonode server failed to start") from state["error"] + raise RuntimeError("argonode server failed to start") from state["error"] _wait_for_server(f"{base_url}/nodes") + window_ref: list[webview.Window | None] = [None] + js_api = _Api(window_ref) + window = webview.create_window( WINDOW_TITLE, base_url, width=1600, height=1000, min_size=(1100, 720), + js_api=js_api, ) + window_ref[0] = window def _shutdown() -> None: loop = state.get("loop") diff --git a/frontend/index.html b/frontend/index.html index 7418eec..146d241 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,7 +3,7 @@ - Argonode — Image Analysis + argonode — Image Analysis

diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 471f968..98af0fe 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7,6 +7,7 @@ "name": "argonode-frontend", "dependencies": { "@xyflow/react": "^12.0.0", + "html-to-image": "^1.11.13", "react": "^18.3.0", "react-dom": "^18.3.0", "three": "^0.183.2" @@ -1539,6 +1540,12 @@ "node": ">=6.9.0" } }, + "node_modules/html-to-image": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", + "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", + "license": "MIT" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index b489587..2082038 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@xyflow/react": "^12.0.0", + "html-to-image": "^1.11.13", "react": "^18.3.0", "react-dom": "^18.3.0", "three": "^0.183.2" diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index a75acc7..5a818a4 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -4,24 +4,26 @@ import React, { import { ReactFlow, Background, Controls, MiniMap, useNodesState, useEdgesState, addEdge, useReactFlow, - ReactFlowProvider, + ReactFlowProvider, getNodesBounds, getViewportForBounds, } from '@xyflow/react'; import '@xyflow/react/dist/style.css'; import CustomNode, { NodeContext } from './CustomNode'; import FileBrowser from './FileBrowser'; import * as api from './api'; +import { toBlob } from 'html-to-image'; +import { embedWorkflow, extractWorkflow } from './pngMetadata'; // ── Constants ───────────────────────────────────────────────────────── const DATA_TYPES = new Set(['DATA_FIELD', 'IMAGE', 'LINE', 'TABLE', 'COORD']); const TYPE_COLORS = { - DATA_FIELD: '#3a7abf', - IMAGE: '#4caf50', - LINE: '#ff9800', - TABLE: '#fdd835', - COORD: '#e91e63', + DATA_FIELD: '#ff002f', + IMAGE: '#00ff08a0', + LINE: '#ffbe5c', + TABLE: '#35e2fd', + COORD: '#e91ed1', }; const NODE_TYPES = { custom: CustomNode }; @@ -272,6 +274,13 @@ function Flow() { // ── File browser ──────────────────────────────────────────────────── const openFileBrowser = useCallback((callback) => { + // Use native file picker when running inside pywebview (desktop app) + if (window.pywebview?.api?.open_file_dialog) { + window.pywebview.api.open_file_dialog().then((path) => { + if (path) callback(path); + }); + return; + } setFileBrowserCb(() => callback); }, []); @@ -427,60 +436,162 @@ function Flow() { setStatus({ text: 'Graph cleared.', level: 'info' }); }, [setNodes, setEdges]); - const saveWorkflow = useCallback(() => { - const currentNodes = reactFlow.getNodes().map((n) => ({ + const applyWorkflowData = useCallback((data) => { + const loadedNodes = data.nodes || []; + const loadedEdges = data.edges || []; + const defs = nodeDefsRef.current; + const hydrated = loadedNodes.map((n) => ({ + ...n, + data: { + ...n.data, + definition: defs[n.data.className] || n.data.definition, + previewImage: null, tableRows: null, meshData: null, overlay: null, + }, + })); + setNodes(hydrated); + setEdges(loadedEdges); + const maxId = Math.max(0, ...loadedNodes.map((n) => parseInt(n.id, 10) || 0)); + nextIdRef.current = maxId + 1; + }, [setNodes, setEdges]); + + const getWorkflowBlob = useCallback(async () => { + const viewportEl = document.querySelector('.react-flow__viewport'); + if (!viewportEl) throw new Error('Flow element not found'); + + const allNodes = reactFlow.getNodes(); + if (allNodes.length === 0) throw new Error('No nodes to capture'); + + const bounds = getNodesBounds(allNodes); + const pad = 0.1; // 10% margin on each side + const imageWidth = Math.ceil(bounds.width * (1 + pad * 2)); + const imageHeight = Math.ceil(bounds.height * (1 + pad * 2)); + const vp = getViewportForBounds(bounds, imageWidth, imageHeight, 0.5, 1, pad); + + const blob = await toBlob(viewportEl, { + backgroundColor: '#1a1a1a', + width: imageWidth, + height: imageHeight, + style: { + width: `${imageWidth}px`, + height: `${imageHeight}px`, + transform: `translate(${vp.x}px, ${vp.y}px) scale(${vp.zoom})`, + }, + }); + if (!blob) throw new Error('Capture returned empty'); + + const currentNodes = allNodes.map((n) => ({ ...n, data: { ...n.data, previewImage: null, tableRows: null, meshData: null, overlay: null }, })); - const data = { version: 1, nodes: currentNodes, edges: reactFlow.getEdges() }; - const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); - const a = document.createElement('a'); - a.href = URL.createObjectURL(blob); - a.download = 'workflow.json'; - a.click(); + const workflow = { version: 1, nodes: currentNodes, edges: reactFlow.getEdges() }; + return embedWorkflow(blob, workflow); }, [reactFlow]); + const saveWorkflow = useCallback(async () => { + setStatus({ text: 'Saving…', level: 'info' }); + try { + const finalBlob = await getWorkflowBlob(); + + if (window.showSaveFilePicker) { + const handle = await window.showSaveFilePicker({ + suggestedName: 'workflow.png', + types: [{ description: 'PNG Image', accept: { 'image/png': ['.png'] } }], + }); + const writable = await handle.createWritable(); + await writable.write(finalBlob); + await writable.close(); + } else { + // Fallback: programmatic download + const a = document.createElement('a'); + a.href = URL.createObjectURL(finalBlob); + a.download = 'workflow.png'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(a.href); + } + + setStatus({ text: 'Workflow saved.', level: 'info' }); + } catch (err) { + if (err.name === 'AbortError') { + setStatus({ text: 'Save cancelled.', level: 'info' }); + } else { + setStatus({ text: 'Save failed: ' + err.message, level: 'error' }); + } + } + }, [getWorkflowBlob]); + + const copySnapshot = useCallback(() => { + setStatus({ text: 'Copying snapshot…', level: 'info' }); + // Pass a Promise to ClipboardItem so the clipboard.write() call + // happens synchronously within the user gesture, avoiding permission errors. + const blobPromise = getWorkflowBlob().catch((err) => { + setStatus({ text: 'Snapshot failed: ' + err.message, level: 'error' }); + throw err; + }); + navigator.clipboard.write([new ClipboardItem({ 'image/png': blobPromise })]).then(() => { + setStatus({ text: 'Snapshot copied to clipboard.', level: 'info' }); + }).catch((err) => { + setStatus({ text: 'Copy failed: ' + err.message, level: 'error' }); + }); + }, [getWorkflowBlob]); + const loadWorkflow = useCallback(() => { const input = document.createElement('input'); input.type = 'file'; - input.accept = '.json'; + input.accept = '.json,.png'; input.onchange = async (e) => { const file = e.target.files[0]; if (!file) return; - const text = await file.text(); try { - const data = JSON.parse(text); - const loadedNodes = data.nodes || []; - const loadedEdges = data.edges || []; - - // Re-populate definitions from current nodeDefs - const defs = nodeDefsRef.current; - const hydrated = loadedNodes.map((n) => ({ - ...n, - data: { - ...n.data, - definition: defs[n.data.className] || n.data.definition, - previewImage: null, - tableRows: null, - meshData: null, - overlay: null, - }, - })); - - setNodes(hydrated); - setEdges(loadedEdges); - - // Update ID counter to avoid collisions - const maxId = Math.max(0, ...loadedNodes.map((n) => parseInt(n.id, 10) || 0)); - nextIdRef.current = maxId + 1; - + let data; + if (file.name.endsWith('.png') || file.type === 'image/png') { + data = await extractWorkflow(file); + if (!data) { + setStatus({ text: 'No workflow data found in image.', level: 'error' }); + return; + } + } else { + data = JSON.parse(await file.text()); + } + applyWorkflowData(data); setStatus({ text: 'Workflow loaded.', level: 'info' }); } catch { - setStatus({ text: 'Invalid workflow JSON.', level: 'error' }); + setStatus({ text: 'Invalid workflow file.', level: 'error' }); } }; input.click(); - }, [setNodes, setEdges]); + }, [applyWorkflowData]); + + // ── Drag-and-drop workflow image loading ─────────────────────────── + + const onDropFile = useCallback(async (event) => { + const files = event.dataTransfer?.files; + if (!files || files.length === 0) return; + event.preventDefault(); + + const file = files[0]; + if (file.type !== 'image/png') return; + + try { + const data = await extractWorkflow(file); + if (!data) { + setStatus({ text: 'No workflow data in this image.', level: 'error' }); + return; + } + applyWorkflowData(data); + setStatus({ text: 'Workflow loaded from image.', level: 'info' }); + } catch (err) { + setStatus({ text: 'Failed to load: ' + err.message, level: 'error' }); + } + }, [applyWorkflowData]); + + const onDragOver = useCallback((event) => { + if (event.dataTransfer?.types?.includes('Files')) { + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + } + }, []); // ── Keyboard shortcut ─────────────────────────────────────────────── @@ -509,7 +620,7 @@ function Flow() {
{/* Toolbar */}
- Argonode + argonode
- - +
{status.text}
@@ -535,7 +649,7 @@ function Flow() { {/* React Flow canvas */}
{ if (!e.target.closest('.context-menu')) setContextMenu(null); - }}> + }} onDrop={onDropFile} onDragOver={onDragOver}> >> 1)) : (c >>> 1); + } + crcTable[i] = c; +} + +function crc32(bytes) { + let crc = 0xFFFFFFFF; + for (let i = 0; i < bytes.length; i++) { + crc = crcTable[(crc ^ bytes[i]) & 0xFF] ^ (crc >>> 8); + } + return (crc ^ 0xFFFFFFFF) >>> 0; +} + +// ── Helpers ────────────────────────────────────────────────────────── + +const PNG_SIG = [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]; + +function isPng(data) { + if (data.length < 8) return false; + for (let i = 0; i < 8; i++) { + if (data[i] !== PNG_SIG[i]) return false; + } + return true; +} + +function chunkType(data, offset) { + return String.fromCharCode( + data[offset + 4], data[offset + 5], data[offset + 6], data[offset + 7], + ); +} + +// ── Public API ─────────────────────────────────────────────────────── + +/** + * Embed a workflow object into a PNG blob as a tEXt chunk. + * Returns a new Blob with the metadata inserted before IEND. + */ +export async function embedWorkflow(pngBlob, workflow) { + const data = new Uint8Array(await pngBlob.arrayBuffer()); + if (!isPng(data)) throw new Error('Not a valid PNG file'); + + const encoder = new TextEncoder(); + + // Build tEXt payload: keyword \0 text + const key = encoder.encode('workflow'); + const val = encoder.encode(JSON.stringify(workflow)); + const payload = new Uint8Array(key.length + 1 + val.length); + payload.set(key, 0); + // payload[key.length] is already 0 (null separator) + payload.set(val, key.length + 1); + + // CRC covers type + payload + const typeBytes = encoder.encode('tEXt'); + const forCrc = new Uint8Array(4 + payload.length); + forCrc.set(typeBytes, 0); + forCrc.set(payload, 4); + + // Assemble chunk: length(4) + type(4) + payload + crc(4) + const chunk = new Uint8Array(12 + payload.length); + const view = new DataView(chunk.buffer); + view.setUint32(0, payload.length); + chunk.set(typeBytes, 4); + chunk.set(payload, 8); + view.setUint32(8 + payload.length, crc32(forCrc)); + + // Locate IEND + let pos = 8; + let iendPos = data.length; + while (pos < data.length) { + const len = new DataView(data.buffer, pos, 4).getUint32(0); + if (chunkType(data, pos) === 'IEND') { iendPos = pos; break; } + pos += 12 + len; + } + + // Splice: [before IEND] + [tEXt chunk] + [IEND] + const result = new Uint8Array(data.length + chunk.length); + result.set(data.subarray(0, iendPos), 0); + result.set(chunk, iendPos); + result.set(data.subarray(iendPos), iendPos + chunk.length); + + return new Blob([result], { type: 'image/png' }); +} + +/** + * Extract the workflow object from a PNG blob's tEXt chunks. + * Returns the parsed object, or null if no "workflow" key is found. + */ +export async function extractWorkflow(pngBlob) { + const data = new Uint8Array(await pngBlob.arrayBuffer()); + if (!isPng(data)) return null; + + const decoder = new TextDecoder(); + let pos = 8; + + while (pos + 8 <= data.length) { + const len = new DataView(data.buffer, pos, 4).getUint32(0); + const type = chunkType(data, pos); + + if (type === 'tEXt' && pos + 8 + len <= data.length) { + const chunkData = data.subarray(pos + 8, pos + 8 + len); + const nullIdx = chunkData.indexOf(0); + if (nullIdx !== -1) { + const k = decoder.decode(chunkData.subarray(0, nullIdx)); + if (k === 'workflow') { + return JSON.parse(decoder.decode(chunkData.subarray(nullIdx + 1))); + } + } + } + + if (type === 'IEND') break; + pos += 12 + len; + } + + return null; +} diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 27a0fab..5b84a67 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -21,8 +21,8 @@ html, body, #root { /* ── Toolbar ───────────────────────────────────────────────────────── */ #toolbar { height: 44px; - background: #16213e; - border-bottom: 1px solid #0f3460; + background: #242424; + border-bottom: 1px solid #000000; display: flex; align-items: center; padding: 0 12px; @@ -36,7 +36,7 @@ html, body, #root { font-size: 15px; font-weight: 700; letter-spacing: 0.5px; - color: #e94560; + color: #ffffff; margin-right: 8px; flex-shrink: 0; } @@ -129,8 +129,17 @@ html, body, #root { cursor: grabbing; } -.custom-node.selected { +/* Selected node — target via React Flow's wrapper class */ +.react-flow__node.selected .custom-node { border-color: #90caf9; + box-shadow: 0 0 0 1px #90caf9, 0 0 12px rgba(144, 202, 249, 0.4); +} + +/* Selected edge */ +.react-flow__edge.selected .react-flow__edge-path { + stroke: #90caf9 !important; + stroke-width: 3px !important; + filter: drop-shadow(0 0 4px rgba(144, 202, 249, 0.6)); } .node-title { diff --git a/package.json b/package.json index b27a7b7..5fe014e 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "preview": "npm --prefix frontend run preview", "backend": "python -m backend.main", "desktop": "python desktop.py", - "build:desktop": "powershell -ExecutionPolicy Bypass -File scripts\\build-desktop.ps1" + "build:windows": "powershell -ExecutionPolicy Bypass -File scripts\\build-windows.ps1", + "build:mac": "bash scripts/build-mac.sh", + "build:linux": "bash scripts/build-linux.sh" } } diff --git a/pyproject.toml b/pyproject.toml index 538b571..e83b80c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,10 @@ readme = "GWYDDION_FEATURE_GAP.md" requires-python = ">=3.10" dependencies = [ "aiohttp>=3.9,<4", + "gwyfile>=0.2", + "igor>=0.3", "matplotlib>=3.8,<4", + "nanonispy>=1.1", "numpy>=1.26,<3", "pillow>=10,<12", "scikit-image>=0.22,<1", @@ -18,11 +21,6 @@ dependencies = [ ] [project.optional-dependencies] -spm = [ - "gwyfile>=0.2", - "igor>=0.3", - "nanonispy>=1.1", -] dev = [ "pytest>=8,<9", ] diff --git a/scripts/build-linux.sh b/scripts/build-linux.sh new file mode 100755 index 0000000..df926c5 --- /dev/null +++ b/scripts/build-linux.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +set -euo pipefail + +ONE_FILE=false +CREATE_TAR=true + +while [[ $# -gt 0 ]]; do + case "$1" in + --onefile) ONE_FILE=true; shift ;; + --no-tar) CREATE_TAR=false; shift ;; + *) echo "Unknown option: $1"; exit 1 ;; + esac +done + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" + +if [ -d ".venv/bin" ]; then + PYTHON=".venv/bin/python" +else + PYTHON="python3" +fi + +FRONTEND_DIST="$REPO_ROOT/frontend/dist" +DEMO_DIR="$REPO_ROOT/demo" + +echo "Building frontend bundle..." +npm run build + +echo "Installing desktop build dependencies..." +uv pip install -e ".[desktop]" + +if $ONE_FILE; then + MODE="--onefile" +else + MODE="--onedir" +fi + +echo "Packaging desktop app with PyInstaller..." +$PYTHON -m PyInstaller \ + desktop.py \ + --noconfirm \ + --clean \ + --name argonode \ + --windowed \ + $MODE \ + --distpath desktop-dist \ + --workpath desktop-build \ + --specpath desktop-build \ + --add-data "${FRONTEND_DIST}:frontend/dist" \ + --add-data "${DEMO_DIR}:demo" \ + --collect-all matplotlib \ + --collect-all scipy \ + --collect-all skimage \ + --collect-all webview + +if $CREATE_TAR; then + TAR_PATH="desktop-dist/argonode-linux.tar.gz" + echo "Creating tarball..." + tar -czf "$TAR_PATH" -C desktop-dist argonode + echo "Tarball created: $TAR_PATH" +fi + +echo "Desktop build complete." +echo "Output: $REPO_ROOT/desktop-dist/" diff --git a/scripts/build-mac.sh b/scripts/build-mac.sh new file mode 100755 index 0000000..c6f92ff --- /dev/null +++ b/scripts/build-mac.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +set -euo pipefail + +ONE_FILE=false +CREATE_DMG=true + +while [[ $# -gt 0 ]]; do + case "$1" in + --onefile) ONE_FILE=true; shift ;; + --no-dmg) CREATE_DMG=false; shift ;; + *) echo "Unknown option: $1"; exit 1 ;; + esac +done + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" + +if [ -d ".venv/bin" ]; then + PYTHON=".venv/bin/python" +else + PYTHON="python3" +fi + +FRONTEND_DIST="$REPO_ROOT/frontend/dist" +DEMO_DIR="$REPO_ROOT/demo" + +echo "Building frontend bundle..." +npm run build + +echo "Installing desktop build dependencies..." +uv pip install -e ".[desktop]" + +if $ONE_FILE; then + MODE="--onefile" +else + MODE="--onedir" +fi + +echo "Packaging desktop app with PyInstaller..." +$PYTHON -m PyInstaller \ + desktop.py \ + --noconfirm \ + --clean \ + --name argonode \ + --windowed \ + $MODE \ + --distpath desktop-dist \ + --workpath desktop-build \ + --specpath desktop-build \ + --add-data "${FRONTEND_DIST}:frontend/dist" \ + --add-data "${DEMO_DIR}:demo" \ + --collect-all matplotlib \ + --collect-all scipy \ + --collect-all skimage \ + --collect-all webview \ + --icon resources/icon.icns 2>/dev/null || \ +$PYTHON -m PyInstaller \ + desktop.py \ + --noconfirm \ + --clean \ + --name argonode \ + --windowed \ + $MODE \ + --distpath desktop-dist \ + --workpath desktop-build \ + --specpath desktop-build \ + --add-data "${FRONTEND_DIST}:frontend/dist" \ + --add-data "${DEMO_DIR}:demo" \ + --collect-all matplotlib \ + --collect-all scipy \ + --collect-all skimage \ + --collect-all webview + +APP_BUNDLE="desktop-dist/argonode.app" + +if [ ! -d "$APP_BUNDLE" ]; then + # --onedir puts it inside a folder + if [ -d "desktop-dist/argonode/argonode.app" ]; then + APP_BUNDLE="desktop-dist/argonode/argonode.app" + else + echo "Warning: .app bundle not found; skipping DMG creation." + CREATE_DMG=false + fi +fi + +if $CREATE_DMG; then + DMG_PATH="desktop-dist/argonode.dmg" + echo "Creating DMG installer..." + rm -f "$DMG_PATH" + + # Create a temporary directory for DMG contents + DMG_STAGING="desktop-build/dmg-staging" + rm -rf "$DMG_STAGING" + mkdir -p "$DMG_STAGING" + cp -R "$APP_BUNDLE" "$DMG_STAGING/" + ln -s /Applications "$DMG_STAGING/Applications" + + hdiutil create \ + -volname "argonode" \ + -srcfolder "$DMG_STAGING" \ + -ov \ + -format UDZO \ + "$DMG_PATH" + + rm -rf "$DMG_STAGING" + echo "DMG created: $DMG_PATH" +fi + +echo "Desktop build complete." +echo "Output: $REPO_ROOT/desktop-dist/" diff --git a/scripts/build-desktop.ps1 b/scripts/build-windows.ps1 similarity index 86% rename from scripts/build-desktop.ps1 rename to scripts/build-windows.ps1 index ac4c302..b129820 100644 --- a/scripts/build-desktop.ps1 +++ b/scripts/build-windows.ps1 @@ -14,6 +14,7 @@ $pythonExe = if (Test-Path ".\.venv\Scripts\python.exe") { "python" } $frontendDist = Join-Path $repoRoot "frontend\dist" +$demoDir = Join-Path $repoRoot "demo" Write-Host "Building frontend bundle..." npm run build @@ -28,13 +29,14 @@ $pyInstallerArgs = @( "desktop.py", "--noconfirm", "--clean", - "--name", "Argonode", + "--name", "argonode", "--windowed", $mode, "--distpath", "desktop-dist", "--workpath", "desktop-build", "--specpath", "desktop-build", "--add-data", "${frontendDist};frontend/dist", + "--add-data", "${demoDir};demo", "--collect-all", "matplotlib", "--collect-all", "scipy", "--collect-all", "skimage", @@ -45,4 +47,4 @@ Write-Host "Packaging desktop app..." & $pythonExe @pyInstallerArgs Write-Host "Desktop build complete." -Write-Host "Output folder: $repoRoot\desktop-dist\Argonode" +Write-Host "Output folder: $repoRoot\desktop-dist\argonode" diff --git a/scripts/generate_demo_particles.py b/scripts/generate_demo_particles.py new file mode 100644 index 0000000..7d8899e --- /dev/null +++ b/scripts/generate_demo_particles.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Generate a synthetic nanoparticle image for the demo/ folder. + +The image simulates an AFM scan of particles on a flat substrate: + - Slightly noisy background + - ~20 hemisphere-shaped particles with varying radii and heights + - Saved as both .npy (calibrated float64) and .png (visual preview) + +Run from project root: + python scripts/generate_demo_particles.py +""" + +import numpy as np +from pathlib import Path + +DEMO_DIR = Path(__file__).resolve().parent.parent / "demo" +DEMO_DIR.mkdir(exist_ok=True) + +RNG = np.random.default_rng(2024) + +# --- Image parameters --- +N = 256 # pixels +SCAN_SIZE = 5e-6 # 5 µm scan +PIXEL_SIZE = SCAN_SIZE / N # metres per pixel +BG_NOISE_RMS = 0.3e-9 # 0.3 nm background noise + +# --- Generate particles --- +particles = [] +# Hand-placed cluster + random scatter to give a realistic spread +fixed = [ + # (cx_frac, cy_frac, radius_nm, height_nm) + (0.25, 0.30, 120, 30), + (0.28, 0.34, 80, 20), + (0.70, 0.25, 150, 45), + (0.50, 0.55, 100, 25), + (0.55, 0.60, 60, 15), + (0.15, 0.75, 200, 55), + (0.80, 0.80, 90, 22), +] +for cx_f, cy_f, r_nm, h_nm in fixed: + particles.append((cx_f * N, cy_f * N, r_nm * 1e-9, h_nm * 1e-9)) + +# Random particles +for _ in range(15): + cx = RNG.uniform(20, N - 20) + cy = RNG.uniform(20, N - 20) + radius = RNG.uniform(30, 180) * 1e-9 # 30–180 nm + height = RNG.uniform(8, 60) * 1e-9 # 8–60 nm + particles.append((cx, cy, radius, height)) + +# --- Render height map --- +image = RNG.normal(0, BG_NOISE_RMS, (N, N)) + +yy, xx = np.mgrid[0:N, 0:N] + +for cx, cy, radius_m, height_m in particles: + radius_px = radius_m / PIXEL_SIZE + dist2 = (xx - cx) ** 2 + (yy - cy) ** 2 + inside = dist2 < radius_px ** 2 + # Hemisphere profile: z = h * sqrt(1 - (r/R)^2) + z = np.zeros_like(image) + z[inside] = height_m * np.sqrt(1.0 - dist2[inside] / radius_px ** 2) + image = np.maximum(image, z) # particles don't subtract from each other + +# --- Save .npy (float64 metres) --- +npy_path = DEMO_DIR / "nanoparticles.npy" +np.save(str(npy_path), image) +print(f"Saved {npy_path} shape={image.shape} range=[{image.min():.2e}, {image.max():.2e}] m") + +# --- Save .png (8-bit grayscale for quick visual) --- +from PIL import Image + +normed = (image - image.min()) / (image.max() - image.min()) +uint8 = (normed * 255).astype(np.uint8) +png_path = DEMO_DIR / "nanoparticles.png" +Image.fromarray(uint8, mode="L").save(str(png_path)) +print(f"Saved {png_path}") + +print(f"\n{len(particles)} particles generated on a {SCAN_SIZE*1e6:.0f} µm × {SCAN_SIZE*1e6:.0f} µm scan") diff --git a/tests/test_grains.py b/tests/test_grains.py new file mode 100644 index 0000000..7b94f85 --- /dev/null +++ b/tests/test_grains.py @@ -0,0 +1,445 @@ +""" +Thorough tests for the grain/particle analysis pipeline: + ThresholdMask → GrainAnalysis + +Covers synthetic geometry (known answers), the demo nanoparticles image, +edge cases, and physical-unit correctness. + +Run from project root: + .venv/bin/python -m tests.test_grains +""" + +import sys +import numpy as np + +sys.path.insert(0, ".") +from backend.data_types import DataField + + +def make_field(data, xreal=1e-6, yreal=1e-6): + return DataField(data=data.astype(np.float64), xreal=xreal, yreal=yreal, + si_unit_xy="m", si_unit_z="m") + + +# ========================================================================= +# ThresholdMask tests +# ========================================================================= + +def test_threshold_otsu_bimodal(): + """Otsu on a clean bimodal image should separate the two populations.""" + print("=== Test: Otsu on bimodal image ===") + from backend.nodes.grains import ThresholdMask + node = ThresholdMask() + + data = np.zeros((128, 128)) + data[30:50, 30:50] = 10.0 # bright square + data[70:100, 80:110] = 10.0 # another bright region + field = make_field(data) + + mask, = node.process(field, method="otsu", threshold=0.0, direction="above") + bright_pixels = (mask == 255) + # Should capture both bright regions + assert bright_pixels[40, 40], "Otsu missed bright region 1" + assert bright_pixels[85, 95], "Otsu missed bright region 2" + # Background should be dark + assert not bright_pixels[0, 0], "Otsu false positive in background" + assert not bright_pixels[60, 60], "Otsu false positive between regions" + print(" PASS\n") + + +def test_threshold_relative_range(): + """Relative threshold at 0.5 should be the midpoint of [min, max].""" + print("=== Test: Relative threshold at midpoint ===") + from backend.nodes.grains import ThresholdMask + node = ThresholdMask() + + data = np.full((64, 64), 2.0) + data[10:20, 10:20] = 8.0 # bright patch, range = [2, 8], midpoint = 5 + field = make_field(data) + + mask, = node.process(field, method="relative", threshold=0.5, direction="above") + # Only the bright patch (value 8 >= 5) should be masked + assert np.all(mask[10:20, 10:20] == 255) + assert np.all(mask[0:10, :] == 0) + assert np.all(mask[20:, :] == 0) + print(" PASS\n") + + +def test_threshold_empty_mask(): + """Very high absolute threshold on low data should produce an empty mask.""" + print("=== Test: Empty mask from high threshold ===") + from backend.nodes.grains import ThresholdMask + node = ThresholdMask() + + data = np.ones((64, 64)) + field = make_field(data) + + mask, = node.process(field, method="absolute", threshold=999.0, direction="above") + assert mask.sum() == 0, "Mask should be completely empty" + print(" PASS\n") + + +def test_threshold_full_mask(): + """Very low absolute threshold should produce an all-white mask.""" + print("=== Test: Full mask from low threshold ===") + from backend.nodes.grains import ThresholdMask + node = ThresholdMask() + + data = np.ones((64, 64)) * 5.0 + field = make_field(data) + + mask, = node.process(field, method="absolute", threshold=-1.0, direction="above") + assert np.all(mask == 255), "Mask should be all white" + print(" PASS\n") + + +# ========================================================================= +# GrainAnalysis tests +# ========================================================================= + +def test_single_circle_area(): + """A single filled circle — verify pixel count and physical area.""" + print("=== Test: Single circle area ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + N = 200 + XREAL = 2e-6 # 2 µm + data = np.zeros((N, N)) + mask = np.zeros((N, N), dtype=np.uint8) + + # Draw a filled circle, radius 30 px, centred at (100, 100) + yy, xx = np.mgrid[0:N, 0:N] + r = 30 + circle = ((xx - 100) ** 2 + (yy - 100) ** 2) <= r ** 2 + data[circle] = 5.0 + mask[circle] = 255 + + field = make_field(data, xreal=XREAL, yreal=XREAL) + table, = node.process(field, mask=mask, min_size=1) + + assert len(table) == 1, f"Expected 1 grain, got {len(table)}" + grain = table[0] + + # Pixel area of a discrete circle: should be close to π r² + expected_px = np.pi * r ** 2 + assert abs(grain["area_px"] - expected_px) / expected_px < 0.02, \ + f"area_px={grain['area_px']}, expected≈{expected_px:.0f}" + + # Physical area + pixel_area = (XREAL / N) ** 2 + expected_m2 = grain["area_px"] * pixel_area + assert abs(grain["area_m2"] - expected_m2) < 1e-20, \ + f"area_m2 mismatch: {grain['area_m2']} vs {expected_m2}" + + # Equivalent diameter should be close to 2r in physical units + expected_diam = 2 * r * (XREAL / N) + assert abs(grain["equiv_diam_m"] - expected_diam) / expected_diam < 0.02, \ + f"equiv_diam={grain['equiv_diam_m']:.3e}, expected≈{expected_diam:.3e}" + + # Heights + assert abs(grain["mean_height"] - 5.0) < 1e-10 + assert abs(grain["max_height"] - 5.0) < 1e-10 + print(" PASS\n") + + +def test_multiple_grains_separation(): + """Three well-separated grains of different sizes — check each is reported.""" + print("=== Test: Multiple grain separation ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + N = 128 + data = np.zeros((N, N)) + mask = np.zeros((N, N), dtype=np.uint8) + + # Grain A: 20×20 block, height 10 + data[10:30, 10:30] = 10.0 + mask[10:30, 10:30] = 255 + + # Grain B: 10×10 block, height 7 + data[60:70, 60:70] = 7.0 + mask[60:70, 60:70] = 255 + + # Grain C: 5×5 block, height 3 + data[100:105, 100:105] = 3.0 + mask[100:105, 100:105] = 255 + + field = make_field(data) + table, = node.process(field, mask=mask, min_size=1) + + assert len(table) == 3, f"Expected 3 grains, got {len(table)}" + + table.sort(key=lambda r: r["area_px"], reverse=True) + assert table[0]["area_px"] == 400 # 20×20 + assert table[1]["area_px"] == 100 # 10×10 + assert table[2]["area_px"] == 25 # 5×5 + + assert abs(table[0]["mean_height"] - 10.0) < 1e-10 + assert abs(table[1]["mean_height"] - 7.0) < 1e-10 + assert abs(table[2]["mean_height"] - 3.0) < 1e-10 + print(" PASS\n") + + +def test_min_size_filtering(): + """min_size should exclude grains smaller than the threshold.""" + print("=== Test: min_size filtering ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + N = 64 + data = np.zeros((N, N)) + mask = np.zeros((N, N), dtype=np.uint8) + + # Large grain: 15×15 = 225 px + data[5:20, 5:20] = 1.0 + mask[5:20, 5:20] = 255 + + # Medium grain: 8×8 = 64 px + data[30:38, 30:38] = 1.0 + mask[30:38, 30:38] = 255 + + # Tiny grain: 3×3 = 9 px + data[50:53, 50:53] = 1.0 + mask[50:53, 50:53] = 255 + + field = make_field(data) + + # min_size=1: all three + table, = node.process(field, mask=mask, min_size=1) + assert len(table) == 3 + + # min_size=10: drops the 3×3 + table, = node.process(field, mask=mask, min_size=10) + assert len(table) == 2 + + # min_size=100: drops the 3×3 and 8×8 + table, = node.process(field, mask=mask, min_size=100) + assert len(table) == 1 + assert table[0]["area_px"] == 225 + + # min_size=300: drops everything + table, = node.process(field, mask=mask, min_size=300) + assert len(table) == 0 + print(" PASS\n") + + +def test_grain_bounding_box(): + """Bounding box should match the grain extents.""" + print("=== Test: Grain bounding box ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + N = 64 + data = np.zeros((N, N)) + mask = np.zeros((N, N), dtype=np.uint8) + # Place a grain at rows 20:35, cols 10:45 + data[20:35, 10:45] = 2.0 + mask[20:35, 10:45] = 255 + + field = make_field(data) + table, = node.process(field, mask=mask, min_size=1) + assert len(table) == 1 + + bbox = table[0]["bbox"] + # Format: "(xmin,ymin)-(xmax,ymax)" = "(10,20)-(44,34)" + assert bbox == "(10,20)-(44,34)", f"bbox={bbox}, expected (10,20)-(44,34)" + print(" PASS\n") + + +def test_empty_mask_produces_no_grains(): + """An all-zero mask should yield zero grains.""" + print("=== Test: Empty mask → no grains ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + field = make_field(np.ones((64, 64))) + mask = np.zeros((64, 64), dtype=np.uint8) + + table, = node.process(field, mask=mask, min_size=1) + assert len(table) == 0 + print(" PASS\n") + + +def test_grain_at_image_edge(): + """A grain touching the image border should still be detected.""" + print("=== Test: Grain at image edge ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + N = 64 + data = np.zeros((N, N)) + mask = np.zeros((N, N), dtype=np.uint8) + # Grain touching top-left corner + data[0:10, 0:10] = 4.0 + mask[0:10, 0:10] = 255 + + field = make_field(data) + table, = node.process(field, mask=mask, min_size=1) + assert len(table) == 1 + assert table[0]["area_px"] == 100 + assert table[0]["bbox"] == "(0,0)-(9,9)" + print(" PASS\n") + + +def test_adjacent_grains_connectivity(): + """Two diagonally-touching blocks should be separate grains + (scipy.ndimage.label uses 4-connectivity by default).""" + print("=== Test: Diagonal adjacency → separate grains ===") + from backend.nodes.grains import GrainAnalysis + node = GrainAnalysis() + + N = 32 + data = np.zeros((N, N)) + mask = np.zeros((N, N), dtype=np.uint8) + + # Block A + data[5:10, 5:10] = 1.0 + mask[5:10, 5:10] = 255 + + # Block B diagonally adjacent (touching only at corner 10,10) + data[10:15, 10:15] = 1.0 + mask[10:15, 10:15] = 255 + + field = make_field(data) + table, = node.process(field, mask=mask, min_size=1) + # Default label() uses structure that connects diagonals? Let's verify. + # scipy.ndimage.label default is cross-shaped (no diagonals) for 2D + assert len(table) == 2, f"Expected 2 separate grains, got {len(table)}" + print(" PASS\n") + + +# ========================================================================= +# End-to-end pipeline: ThresholdMask → GrainAnalysis +# ========================================================================= + +def test_pipeline_synthetic(): + """Full pipeline on a synthetic image with known geometry.""" + print("=== Test: Full pipeline on synthetic particles ===") + from backend.nodes.grains import ThresholdMask, GrainAnalysis + + N = 200 + XREAL = 10e-6 # 10 µm + rng = np.random.default_rng(99) + + # Background at 0 with small noise, particles as raised bumps + bg = rng.normal(0, 0.1, (N, N)) + particles = np.zeros((N, N)) + + yy, xx = np.mgrid[0:N, 0:N] + + specs = [ + (50, 50, 15, 5.0), # (cx, cy, radius_px, height) + (150, 50, 20, 8.0), + (100, 100, 10, 3.0), + (50, 160, 25, 6.0), + (160, 160, 12, 4.0), + ] + for cx, cy, r, h in specs: + inside = ((xx - cx) ** 2 + (yy - cy) ** 2) <= r ** 2 + particles[inside] = h + + data = bg + particles + field = make_field(data, xreal=XREAL, yreal=XREAL) + + # Step 1: threshold + thresh = ThresholdMask() + mask, = thresh.process(field, method="absolute", threshold=1.0, direction="above") + + # Particles are well above noise, so mask should capture all 5 + assert mask.max() == 255, "No particles detected" + + # Step 2: grain analysis + ga = GrainAnalysis() + table, = ga.process(field, mask=mask, min_size=5) + + assert len(table) == 5, f"Expected 5 grains, got {len(table)}" + + # Verify that detected areas are in the right ballpark + table.sort(key=lambda r: r["area_px"], reverse=True) + expected_areas = sorted([np.pi * r ** 2 for _, _, r, _ in specs], reverse=True) + + for grain, expected_px in zip(table, expected_areas): + ratio = grain["area_px"] / expected_px + assert 0.85 < ratio < 1.15, \ + f"grain area_px={grain['area_px']}, expected≈{expected_px:.0f}, ratio={ratio:.2f}" + + print(" PASS\n") + + +def test_pipeline_demo_image(): + """Run the full pipeline on the bundled demo nanoparticles image.""" + print("=== Test: Full pipeline on demo nanoparticles.npy ===") + from pathlib import Path + from backend.nodes.grains import ThresholdMask, GrainAnalysis + from backend.runtime_paths import demo_dir + + npy_path = demo_dir() / "nanoparticles.npy" + if not npy_path.exists(): + print(" SKIP (demo image not found)\n") + return + + data = np.load(str(npy_path)).astype(np.float64) + # The demo image is a 5 µm × 5 µm scan + field = make_field(data, xreal=5e-6, yreal=5e-6) + + # Threshold to find particles (they are raised above background) + thresh = ThresholdMask() + mask, = thresh.process(field, method="otsu", threshold=0.0, direction="above") + + # Should detect particles + assert mask.max() == 255, "No particles found in demo image" + particle_fraction = (mask == 255).sum() / mask.size + assert 0.01 < particle_fraction < 0.5, \ + f"Suspicious particle fraction: {particle_fraction:.3f}" + print(f" Mask: {particle_fraction*100:.1f}% of pixels are particles") + + # Grain analysis + ga = GrainAnalysis() + table, = ga.process(field, mask=mask, min_size=20) + + assert len(table) > 0, "No grains detected" + print(f" Found {len(table)} grains (min_size=20)") + + # Sanity checks on grain properties + for grain in table: + assert grain["area_px"] >= 20 + assert grain["area_m2"] > 0 + assert grain["equiv_diam_m"] > 0 + assert grain["max_height"] >= grain["mean_height"] + assert grain["mean_height"] > 0 + + # Physical size sanity: equivalent diameters should be in the nm–µm range + diams_nm = [g["equiv_diam_m"] * 1e9 for g in table] + print(f" Diameters: min={min(diams_nm):.0f} nm, max={max(diams_nm):.0f} nm") + assert all(1 < d < 2000 for d in diams_nm), \ + f"Grain diameters out of expected range: {diams_nm}" + + print(" PASS\n") + + +# ========================================================================= +# Run all tests +# ========================================================================= + +if __name__ == "__main__": + # ThresholdMask + test_threshold_otsu_bimodal() + test_threshold_relative_range() + test_threshold_empty_mask() + test_threshold_full_mask() + + # GrainAnalysis + test_single_circle_area() + test_multiple_grains_separation() + test_min_size_filtering() + test_grain_bounding_box() + test_empty_mask_produces_no_grains() + test_grain_at_image_edge() + test_adjacent_grains_connectivity() + + # End-to-end pipeline + test_pipeline_synthetic() + test_pipeline_demo_image() + + print("All grain tests passed!") diff --git a/tests/test_nodes.py b/tests/test_nodes.py index 5f90f4d..541ca60 100644 --- a/tests/test_nodes.py +++ b/tests/test_nodes.py @@ -85,6 +85,88 @@ def test_edge_detect(): print(" PASS\n") +def test_fft_filter_1d(): + print("=== Test: FFTFilter1D ===") + from backend.nodes.filters import FFTFilter1D + node = FFTFilter1D() + + # Signal: low-frequency sine + high-frequency sine + n = 256 + t = np.arange(n, dtype=np.float64) / n + low = np.sin(2 * np.pi * 3 * t) # 3 cycles — low freq + high = np.sin(2 * np.pi * 80 * t) # 80 cycles — high freq + line = low + high + + # Lowpass should keep low, suppress high + filtered_lp, = node.process(line, filter_type="lowpass", cutoff=0.15, cutoff_high=0.4, order=4) + assert len(filtered_lp) == n + corr_low = np.corrcoef(filtered_lp, low)[0, 1] + corr_high = np.corrcoef(filtered_lp, high)[0, 1] + assert corr_low > 0.95, f"Lowpass: correlation with low={corr_low}" + assert abs(corr_high) < 0.3, f"Lowpass: correlation with high={corr_high}" + + # Highpass should keep high, suppress low + filtered_hp, = node.process(line, filter_type="highpass", cutoff=0.4, cutoff_high=0.4, order=4) + corr_low_hp = np.corrcoef(filtered_hp, low)[0, 1] + corr_high_hp = np.corrcoef(filtered_hp, high)[0, 1] + assert abs(corr_low_hp) < 0.3, f"Highpass: correlation with low={corr_low_hp}" + assert corr_high_hp > 0.95, f"Highpass: correlation with high={corr_high_hp}" + + # Bandpass centred on the high frequency + filtered_bp, = node.process(line, filter_type="bandpass", cutoff=0.4, cutoff_high=0.8, order=4) + corr_low_bp = np.corrcoef(filtered_bp, low)[0, 1] + corr_high_bp = np.corrcoef(filtered_bp, high)[0, 1] + assert abs(corr_low_bp) < 0.3, f"Bandpass: correlation with low={corr_low_bp}" + assert corr_high_bp > 0.9, f"Bandpass: correlation with high={corr_high_bp}" + + # Notch (band-reject) centred on the high frequency — should remove it + filtered_notch, = node.process(line, filter_type="notch", cutoff=0.4, cutoff_high=0.8, order=4) + corr_low_notch = np.corrcoef(filtered_notch, low)[0, 1] + corr_high_notch = np.corrcoef(filtered_notch, high)[0, 1] + assert corr_low_notch > 0.95, f"Notch: correlation with low={corr_low_notch}" + assert abs(corr_high_notch) < 0.3, f"Notch: correlation with high={corr_high_notch}" + + print(" PASS\n") + + +def test_fft_filter_2d(): + print("=== Test: FFTFilter2D ===") + from backend.nodes.filters import FFTFilter2D + node = FFTFilter2D() + + N = 128 + y, x = np.mgrid[0:N, 0:N] / N + # Low-frequency 2D pattern + high-frequency pattern + low_2d = np.sin(2 * np.pi * 3 * x) + np.sin(2 * np.pi * 3 * y) + high_2d = np.sin(2 * np.pi * 40 * x) + np.sin(2 * np.pi * 40 * y) + data = low_2d + high_2d + field = make_field(data=data, shape=None, xreal=1e-6, yreal=1e-6) + + # Lowpass — should preserve low, remove high + result_lp, = node.process(field, filter_type="lowpass", cutoff=0.15, cutoff_high=0.4, order=4) + assert result_lp.data.shape == (N, N) + assert result_lp.xreal == field.xreal + assert result_lp.si_unit_z == field.si_unit_z + corr_low = np.corrcoef(result_lp.data.ravel(), low_2d.ravel())[0, 1] + corr_high = np.corrcoef(result_lp.data.ravel(), high_2d.ravel())[0, 1] + assert corr_low > 0.9, f"2D lowpass: correlation with low={corr_low}" + assert abs(corr_high) < 0.3, f"2D lowpass: correlation with high={corr_high}" + + # Highpass — should preserve high, remove low + result_hp, = node.process(field, filter_type="highpass", cutoff=0.4, cutoff_high=0.4, order=4) + corr_low_hp = np.corrcoef(result_hp.data.ravel(), low_2d.ravel())[0, 1] + corr_high_hp = np.corrcoef(result_hp.data.ravel(), high_2d.ravel())[0, 1] + assert abs(corr_low_hp) < 0.3, f"2D highpass: correlation with low={corr_low_hp}" + assert corr_high_hp > 0.9, f"2D highpass: correlation with high={corr_high_hp}" + + # Constant field should be unchanged by lowpass (DC preservation) + const = make_field(data=np.ones((32, 32)) * 7.0) + result_const, = node.process(const, filter_type="lowpass", cutoff=0.5, cutoff_high=0.5, order=2) + assert np.allclose(result_const.data, 7.0, atol=1e-10), "Lowpass should preserve constant field" + + print(" PASS\n") + + # ========================================================================= # Level # ========================================================================= @@ -199,7 +281,7 @@ def test_height_histogram(): data = np.linspace(0, 1, 1000).reshape(25, 40) field = make_field(data=data) - counts, bin_centers = node.process(field, n_bins=10) + counts, bin_centers = node.process(field, n_bins=10, y_scale="linear") assert len(counts) == 10 assert len(bin_centers) == 10 assert counts.dtype == np.float64 @@ -265,7 +347,7 @@ def test_cross_section(): def test_threshold_mask(): print("=== Test: ThresholdMask ===") - from backend.nodes.grains import ThresholdMask + from backend.nodes.mask import ThresholdMask node = ThresholdMask() # Clear bimodal data: left half = 0, right half = 1 @@ -273,6 +355,11 @@ def test_threshold_mask(): data[:, 32:] = 1.0 field = make_field(data=data) + # Capture overlay preview + previews = [] + ThresholdMask._broadcast_fn = lambda nid, uri: previews.append(uri) + ThresholdMask._current_node_id = "test" + # Absolute threshold at 0.5 mask, = node.process(field, method="absolute", threshold=0.5, direction="above") assert mask.dtype == np.uint8 @@ -280,6 +367,10 @@ def test_threshold_mask(): assert np.all(mask[:, :32] == 0) assert np.all(mask[:, 32:] == 255) + # Verify overlay preview was broadcast + assert len(previews) == 1 + assert previews[0].startswith("data:image/png;base64,") + # Direction "below" mask_below, = node.process(field, method="absolute", threshold=0.5, direction="below") assert np.all(mask_below[:, :32] == 255) @@ -292,20 +383,117 @@ def test_threshold_mask(): # Otsu should find the bimodal threshold mask_otsu, = node.process(field, method="otsu", threshold=0.0, direction="above") assert mask_otsu[:, 32:].sum() > mask_otsu[:, :32].sum() + + ThresholdMask._broadcast_fn = None print(" PASS\n") -def test_grain_analysis(): - print("=== Test: GrainAnalysis ===") - from backend.nodes.grains import GrainAnalysis - node = GrainAnalysis() +def test_mask_morphology(): + print("=== Test: MaskMorphology ===") + from backend.nodes.mask import MaskMorphology + node = MaskMorphology() - # Create a field with two distinct "grains" + # Small square blob in the centre + mask = np.zeros((64, 64), dtype=np.uint8) + mask[28:36, 28:36] = 255 # 8x8 block + orig_count = np.count_nonzero(mask) + + # Dilate should grow the region + dilated, = node.process(mask, operation="dilate", radius=1, shape="square") + assert dilated.dtype == np.uint8 + assert np.count_nonzero(dilated) > orig_count + + # Erode should shrink it + eroded, = node.process(mask, operation="erode", radius=1, shape="square") + assert np.count_nonzero(eroded) < orig_count + + # Open on a clean block should give back roughly the same block + opened, = node.process(mask, operation="open", radius=1, shape="square") + assert np.count_nonzero(opened) <= orig_count + + # Close on a mask with a 1-pixel hole should fill the hole + mask_hole = mask.copy() + mask_hole[32, 32] = 0 # poke a hole + assert np.count_nonzero(mask_hole) == orig_count - 1 + closed, = node.process(mask_hole, operation="close", radius=1, shape="square") + assert closed[32, 32] == 255, "Close should fill the 1-pixel hole" + + # Disk structuring element should also work + dilated_disk, = node.process(mask, operation="dilate", radius=2, shape="disk") + assert np.count_nonzero(dilated_disk) > orig_count + + print(" PASS\n") + + +def test_mask_invert(): + print("=== Test: MaskInvert ===") + from backend.nodes.mask import MaskInvert + node = MaskInvert() + + mask = np.zeros((64, 64), dtype=np.uint8) + mask[10:20, 10:20] = 255 + + inverted, = node.process(mask) + assert inverted.dtype == np.uint8 + assert np.all(inverted[10:20, 10:20] == 0) + assert np.all(inverted[0:10, 0:10] == 255) + # Double-invert should return to original + double, = node.process(inverted) + assert np.array_equal(double, mask) + + print(" PASS\n") + + +def test_mask_combine(): + print("=== Test: MaskCombine ===") + from backend.nodes.mask import MaskCombine + node = MaskCombine() + + # Two overlapping squares + a = np.zeros((64, 64), dtype=np.uint8) + a[10:30, 10:30] = 255 # 20x20 + b = np.zeros((64, 64), dtype=np.uint8) + b[20:40, 20:40] = 255 # 20x20, overlaps 10x10 + + # AND — only the overlap + result_and, = node.process(a, b, operation="and") + assert np.all(result_and[20:30, 20:30] == 255) + assert result_and[15, 15] == 0 # a-only region + assert result_and[35, 35] == 0 # b-only region + + # OR — union + result_or, = node.process(a, b, operation="or") + assert result_or[15, 15] == 255 + assert result_or[35, 35] == 255 + assert result_or[25, 25] == 255 + assert result_or[5, 5] == 0 + + # XOR — symmetric difference + result_xor, = node.process(a, b, operation="xor") + assert result_xor[15, 15] == 255 # a-only + assert result_xor[35, 35] == 255 # b-only + assert result_xor[25, 25] == 0 # overlap excluded + + # Subtract — a minus b + result_sub, = node.process(a, b, operation="subtract") + assert result_sub[15, 15] == 255 # a-only kept + assert result_sub[25, 25] == 0 # overlap removed + assert result_sub[35, 35] == 0 # b-only not included + + print(" PASS\n") + + +def test_particle_analysis(): + print("=== Test: ParticleAnalysis ===") + from backend.nodes.grains import ParticleAnalysis + node = ParticleAnalysis() + + # Create a field with two distinct particles N = 64 data = np.zeros((N, N)) - # Grain 1: 10x10 block at top-left with height 5 + # Particle 1: 10x10 block at top-left with height 5 data[5:15, 5:15] = 5.0 - # Grain 2: 8x8 block at bottom-right with height 3 + # Particle 2: 8x8 block at bottom-right with height 3 data[45:53, 45:53] = 3.0 field = make_field(data=data, xreal=1e-6, yreal=1e-6) @@ -315,7 +503,7 @@ def test_grain_analysis(): mask[45:53, 45:53] = 255 table, = node.process(field, mask=mask, min_size=10) - assert len(table) == 2, f"Expected 2 grains, got {len(table)}" + assert len(table) == 2, f"Expected 2 particles, got {len(table)}" # Sort by area descending table.sort(key=lambda r: r["area_px"], reverse=True) @@ -324,7 +512,7 @@ def test_grain_analysis(): assert abs(table[0]["mean_height"] - 5.0) < 1e-10 assert abs(table[1]["mean_height"] - 3.0) < 1e-10 - # min_size filtering: only keep grains >= 80 px + # min_size filtering: only keep particles >= 80 px table_filtered, = node.process(field, mask=mask, min_size=80) assert len(table_filtered) == 1 assert table_filtered[0]["area_px"] == 100 @@ -462,6 +650,8 @@ if __name__ == "__main__": test_gaussian_filter() test_median_filter() test_edge_detect() + test_fft_filter_1d() + test_fft_filter_2d() # Level test_plane_level() @@ -473,9 +663,14 @@ if __name__ == "__main__": test_height_histogram() test_cross_section() - # Grains + # Mask test_threshold_mask() - test_grain_analysis() + test_mask_morphology() + test_mask_invert() + test_mask_combine() + + # Grains + test_particle_analysis() # I/O test_load_image()