add a few more nodes
Some checks failed
Build / Build (Linux) (push) Has been cancelled
Build / Build (macOS) (push) Has been cancelled
Build / Build (Windows) (push) Has been cancelled
Deploy / test (push) Has been cancelled
Deploy / deploy (push) Has been cancelled
Tests / test (push) Has been cancelled

This commit is contained in:
2026-05-18 20:55:46 -07:00
parent 92ede31867
commit d4c5cf4670
17 changed files with 854 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
# Missing Gwyddion Features
Gwyddion 2D image/surface processing features not yet implemented in tono. Excludes force curves, force volume, spectroscopy, volume data, XYZ data, graph operations, and file I/O.
## Leveling / Background Removal
- [x] **Arc Revolve** — Subtract cylindrical arc background fitted by revolving an arc under the data
- [x] **Sphere Revolve** — Subtract spherical cap background
- [x] **Unrotate** — Auto-detect and correct in-plane scan rotation by finding dominant feature directions
- [x] **Level Rotate** — Level by physically rotating the data plane rather than subtracting a polynomial
- [x] **Zero Mean Value** — Shift all values so the mean is exactly zero (pure offset, no plane fit)
- [x] **Zero Maximum Value** — Shift all values so the maximum is exactly zero
## Filtering / Signal Processing
- [ ] **2D CWT** — Continuous Wavelet Transform for scale-space analysis
- [ ] **XY Denoise** — Denoise by combining two orthogonal scans (forward/backward or horizontal/vertical)
- [ ] **Rank Presentation** — Rank transform image for local contrast enhancement
- [ ] **Radial Smoothing** — Smooth data in polar coordinates, averaging along radial or angular direction
- [ ] **Convolve Two Images** — Convolve two separate data channels together
## Line Correction / Scan Artifacts
- [ ] **Step Block Correction** — Correct vertical step offsets between scan lines by block-matching
- [ ] **Good Mean Profile** — Compute a high-quality average scan line from repeated scans
- [ ] **Align Rows (extended methods)** — Modus and Gaussian-weighted row alignment beyond tono's current set
## Correction / Restoration
- [ ] **Fractal Correction** — Fill masked/bad pixels using fractal interpolation (alternative to Laplace)
- [ ] **Correlation Averaging** — Average repeated similar structures using autocorrelation alignment
- [ ] **Coerce** — Force data to match the histogram distribution of another dataset
- [ ] **Periodic Translate** — Translate image data treating the field as periodic (wrap-around shift)
- [ ] **Reorder** — Reorder pixel rows/columns (interleaved to sequential, reverse scan, etc.)
## Statistical Analysis
- [ ] **Transfer Function Fit** — Fit PSF from a known reference image and a measured blurred image
- [ ] **Transfer Function Guess** — Estimate PSF from a single image without a reference
- [ ] **Angle Distribution** — Distribution of surface normal angles (distinct from slope distribution)
## Grain Operations
- [ ] **Otsu Threshold** — Automated grain/mask threshold using Otsu's method
- [ ] **Remove Edge-Touching Grains** — Remove all grains touching the image border from a mask
- [ ] **Grain Selection Shapes** — Create geometric selections (bounding boxes, inscribed discs, etc.) from grain masks
## Mask Operations
- [ ] **Mask Thin** — Morphological thinning to single-pixel-wide skeletons
- [ ] **Mask Distribute** — Copy/distribute a mask to multiple channels simultaneously
- [ ] **Mark With** — Create or modify a mask using arithmetic conditions on other channels
## Basic Operations
- [ ] **Invert Value** — Flip heights (z to -z)
- [ ] **Log Scale Presentation** — Log-scaled presentation layer without modifying source data
- [ ] **Limit Range** — Clamp data values to a specified min/max range
- [ ] **Square Samples** — Resample so pixels are physically square (equal x/y size)
- [ ] **Null Offsets** — Zero out the lateral (XY) origin offsets
## SPM-Specific Modes
- [ ] **MFM Field Simulation** — Simulate magnetic stray field above perpendicular media
- [ ] **MFM Parallel Media** — Simulate MFM signal for in-plane magnetic media
- [ ] **MFM Lift Shift** — Simulate MFM signal change when lift height changes
- [ ] **MFM Lift Estimate** — Estimate lift height difference from data blur
- [ ] **MFM Force Gradient** — Convert MFM raw data to force gradient units
- [ ] **SMM Apply Calibration** — Apply Scanning Microwave Microscopy calibration coefficients
## Synthetic Surface Generators
Tono has one generic Synthetic Surface node. Gwyddion has ~20+ specialized generators:
- [ ] **Fractional Brownian Motion** — fBm rough surfaces with controlled Hurst exponent
- [ ] **Spectral Synthesis** — PSD-specified random rough surfaces
- [ ] **Lattice** — Crystalline lattice surface with defects
- [ ] **Objects** — Randomly placed 3D objects (spheres, pyramids, etc.)
- [ ] **Patterns** — Geometric patterns (staircase, gratings, etc.)
- [ ] **Waves** — Sinusoidal/wave patterns
- [ ] **Noise** — Uncorrelated random noise with configurable distribution
- [ ] **Line Noise** — Synthetic scan-line noise/steps/scars for testing
- [ ] **Fibres** — Random fibre network surfaces
- [ ] **Domain Walls** — Phase-separated domain structures
- [ ] **Columnar Growth** — Columnar thin-film growth simulation
- [ ] **Ball Deposition** — Random ballistic deposition growth
- [ ] **Particle Deposition** — Dynamical particle deposition model
- [ ] **Rod Deposition** — Rod-like particle deposition
- [ ] **Diffusion** — Diffusion-limited aggregation surfaces
- [ ] **Discs** — Random overlapping disc surfaces
- [ ] **CPDE / Turing** — Reaction-diffusion / Turing pattern surfaces
- [ ] **Sand Dunes** — Aeolian sand transport simulation
- [ ] **Annealing Lattice Gas** — Annealed lattice-gas model textures
- [ ] **Phase Separation** — Spinodal decomposition textures
- [ ] **Pileup** — Piled-up ellipsoids or bars
- [ ] **Plateaus** — Stacked random plateau/terrace structures
- [ ] **Film Residue** — Residue left after simulated film removal
- [ ] **Wetting Front** — Propagating wetting front simulation

29
docs/nodes/Arc Revolve.md Normal file
View File

@@ -0,0 +1,29 @@
# Arc Revolve
Subtract a cylindrical arc background. A circular arc of the given radius is rolled under each row (or column), and the envelope it traces is subtracted as the background.
## Inputs
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field | DATA_FIELD | Yes | Input field |
## Outputs
| Name | Type | Description |
|------|------|-------------|
| leveled | DATA_FIELD | Field with arc background subtracted |
| background | DATA_FIELD | The estimated arc background |
## Controls
| Name | Type | Default | Description |
|------|------|---------|-------------|
| radius | INT | 20 | Arc radius in pixels (11000) |
| direction | dropdown | horizontal | Direction to apply the arc: horizontal, vertical, or both |
## Notes
- Larger radii produce smoother backgrounds that follow gentle curvature. Smaller radii track finer features.
- The "both" direction takes the minimum of horizontal and vertical backgrounds.
- Deep outliers are suppressed before fitting so that scratches or pits do not pull the arc down.

View File

@@ -0,0 +1,21 @@
# Level Rotate
Level by physically rotating the data plane. Fits a best-fit plane, converts its slopes to tilt angles, then rotates the surface by those angles using interpolation rather than algebraic subtraction.
## Inputs
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field | DATA_FIELD | Yes | Input field to level |
## Outputs
| Name | Type | Description |
|------|------|-------------|
| leveled | DATA_FIELD | Field with tilt removed by rotation |
## Notes
- Unlike Plane Level (which subtracts a fitted plane), this node rotates the 3D surface to make it horizontal. The distinction matters for steep tilts where subtraction introduces distortion.
- Uses bilinear interpolation to resample rotated z-values.
- Edges are handled with nearest-neighbor extension.

View File

@@ -0,0 +1,28 @@
# Sphere Revolve
Subtract a spherical cap background. A sphere of the given radius is rolled under the surface, and the envelope it traces is subtracted as the background.
## Inputs
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field | DATA_FIELD | Yes | Input field |
## Outputs
| Name | Type | Description |
|------|------|-------------|
| leveled | DATA_FIELD | Field with spherical background subtracted |
| background | DATA_FIELD | The estimated spherical background |
## Controls
| Name | Type | Default | Description |
|------|------|---------|-------------|
| radius | INT | 20 | Sphere radius in pixels (1500) |
## Notes
- Works like Arc Revolve but in two dimensions — suitable for bowl-shaped or dome-shaped backgrounds.
- Larger radii produce smoother backgrounds. Very small radii will track individual features.
- Deep outliers are suppressed before fitting.

28
docs/nodes/Unrotate.md Normal file
View File

@@ -0,0 +1,28 @@
# Unrotate
Auto-detect and correct in-plane scan rotation. Computes a slope angle histogram, finds the dominant feature direction for the given symmetry, and rotates the image to align features with the axes.
## Inputs
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field | DATA_FIELD | Yes | Input field to correct |
## Outputs
| Name | Type | Description |
|------|------|-------------|
| leveled | DATA_FIELD | Field with rotation corrected |
## Controls
| Name | Type | Default | Description |
|------|------|---------|-------------|
| symmetry | dropdown | 4-fold | Expected symmetry of the surface features: 2-fold, 3-fold, 4-fold, or 6-fold |
## Notes
- Best suited for crystalline or patterned surfaces where features have a clear preferred direction.
- 4-fold symmetry is the most common choice for cubic crystal surfaces and rectangular gratings.
- If the detected rotation is less than 0.01°, the data is returned unchanged.
- Uses bilinear interpolation; edges are handled with nearest-neighbor extension.

View File

@@ -0,0 +1,20 @@
# Zero Maximum
Shift all values so the maximum is exactly zero. All resulting values will be zero or negative.
## Inputs
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field | DATA_FIELD | Yes | Input field to level |
## Outputs
| Name | Type | Description |
|------|------|-------------|
| leveled | DATA_FIELD | Field with maximum subtracted |
## Notes
- Equivalent to subtracting the global maximum from every pixel.
- Useful when the highest point should represent the zero reference.

20
docs/nodes/Zero Mean.md Normal file
View File

@@ -0,0 +1,20 @@
# Zero Mean
Shift all values so the mean is exactly zero. A pure offset subtraction — no plane fit or polynomial involved.
## Inputs
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field | DATA_FIELD | Yes | Input field to level |
## Outputs
| Name | Type | Description |
|------|------|-------------|
| leveled | DATA_FIELD | Field with mean subtracted |
## Notes
- Equivalent to subtracting a constant (the mean) from every pixel.
- Does not change relative height differences — only shifts the overall offset.