Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Geophysical 2D Data Processing Platform

MATLABRelease

2D geophysical potential-field data processing platform — 28 function modules covering gridding, enhancement, field separation, spectral analysis, normalization, coordinate transformation, and layer-stack processing for gravity and magnetic data.

splash

Overview

A comprehensive batch-processing GUI for 2D gridded potential-field data. All operators are pure-function +ops package members callable headlessly or through the GUI. Features automatic input-mode switching, multi-output support, cross-session persistence, and unified frequency-domain wavenumber conventions.

Design Principles

  • Pure-function operators: Each +ops function takes (G, params) → returns G. Callable headlessly in pipelines.
  • Auto input-mode switching: grid / scatter / dualGrid / stack — the GUI rebuilds input panels accordingly.
  • Multi-output: Multi-scale separation, normalization-to-reference etc. produce multiple outputs; preview dropdown lets you switch.
  • Cross-session persistence: All inputs auto-saved to appState.json, auto-restored on next launch.

Features (28 Modules)

Gridding

  • Scatter interpolation (14 methods): 5 MATLAB built-in + 9 Surfer methods (Kriging, IDW, minimum curvature, RBF, modified Shepard, natural neighbor, triangulation, moving average, local polynomial)

Grid Math

  • Gaussian smoothing: NaN-aware 2D separable Gaussian kernel convolution
  • Detrend: Least-squares polynomial surface removal (1st/2nd order)

Potential-Field Enhancement

  • Upward continuation: Frequency-domain exp(-|k|·h) operator
  • Vertical derivative: |k|^n enhancement, n=1 or 2
  • Multi-method enhancement (8 methods): Horizontal derivative X/Y, Total Horizontal Derivative (THD), Analytic Signal (AS), Tilt angle, TDX (Tilt horizontal gradient), Reduction to Pole (RTP), Downward continuation
  • Euler deconvolution: Sliding-window source depth inversion (SI 0–3, Reid et al. 1990)

Field Separation (9 methods)

  • Difference of Gaussian (DoG), Upward continuation, Matched filter, Interpolation cutting, Wavelet (DWT sym4), Dual-tree complex wavelet (DTCWT), Variational mode decomposition (VMD 2D), CEEMDAN, Least-squares (polynomial fit)
  • Multi-scale separation: Two-stage cascade + parallel stripping with configurable scale lists, optional parfor acceleration

Grid Tools

  • 2D Pull-back correction: Directional leaky integration with damping
  • Directional derivative: Frequency-domain |k|^n in x/y/z/total gradient
  • FK wavenumber-domain filtering: Radial bandpass with cosine taper (physical wavenumber rad/m)
  • Radial power spectrum: Spector & Grant (1970) depth estimation (ln P vs k)
  • Grid integration: 1D cumulative / 2D window (rectangular/trapezoidal/Simpson)
  • Grid expand: Edge padding with sync of geo-headers
  • Format conversion: ASC ↔ GRD ↔ MAT ↔ XYZ

Normalization

  • Self-normalization: Linear (min-max) / Robust (percentile) / Anchor (piecewise with auto inflection detection)
  • GRD threshold analysis: Histogram + polynomial fit + derivative root-finding for auto-anchor detection
  • Normalize to reference: Map distribution B → distribution A with piecewise linear mapping

Grid Operations (dual-input)

  • Time-lapse differencing: B − A with grid geometry validation
  • Spectral norm matching: Optimal scaling factor minimizing ||A − αB||₂

Layer Stack Processing

  • Layer difference: Adjacent depth slices → ∂f/∂z approximation
  • Along-layer extraction: Vertical linear interpolation at horizon depth
  • Layer-stack averaging: Thickness-average / weighted average between top/bottom horizons

Coordinate Transformation

  • Grid rotation: Rigid rotation about data center with re-interpolation
  • 7-parameter coordinate transform: Bursa-Wolf + Gauss-Kruger projection (via Par.txt)

Utilities

  • White clip: Polygon (inpolygon) masking, keep interior or exterior
  • Grid expand: padarray with geo-header sync

System Requirements

ComponentRequirement
OSWindows 10/11 (64-bit)
RuntimeMATLAB Runtime R2026a
Surfer (optional)Golden Software Surfer 13+ for advanced gridding
Memory8 GB recommended

Screenshots

Full UIComplete GUI layout — function tree (left), parameter panel (center), preview area (right)

UI PreviewHeatmap preview with interactive colormap selection (19 colormaps)

Workflow28-module processing pipeline — from gridding to layer-stack export

Source Model FigureEuler deconvolution source model illustration

Documentation

DocumentContent
用户手册 (User Manual)Full mathematical principles, formulas, and parameter reference for all 28 modules (§4), Headless CLI API, wavenumber conventions, error handling
操作手册 (Operations Guide)Quick-start (5 min), UI walkthrough, step-by-step operations for 4 input modes, typical workflow scenarios, parameter cheat sheet, glossary, troubleshooting
安装说明 (Installation Guide)System requirements, license activation, toolbox dependencies, Surfer COM setup
代码说明 (Developer Guide)Code organization, package structure, operator contracts, command-line usage

Workflow

Scatter → Grid → Smooth → Upward Continuation → Enhancement (THD/Tilt) → Euler Deconvolution
│
├→ FK Filter → Spectral Analysis
│
└→ Field Separation → Multi-scale → Layer Stack

workflow

Headless CLI Usage

addpath('Geophysical2dDataProcessingPlatform')
% Read → Process → Write pipeline
G =core.gridRead('bouguer.asc');
G =ops.opUpward(G, struct('height', 1000));
G =ops.opGridDeriv(G, struct('direction', 'z', 'order', 1));
core.gridWrite(G, 'processed.asc');
% Batch processingcore.batchRun('./input/', '*.asc', './output/', @ops.opSmooth, struct('sigma', 3));
% Dual inputcore.batchRunDual('./time1/', './time2/', '*.asc', './diff/', @ops.opTimeLapse, struct());
% Layer stackcore.batchRunStack('./slices/', '*.asc', './layers/', @ops.opLayerDiff, struct());

Output Formats

FormatExtensionDescription
Esri ASCII.ascArcInfo text grid, N→S row order
Surfer DSAA.grdSurfer 6 text grid, S→N row order
MAT.matGrid struct (z, ncols, nrows, xll, yll, cellsize, nodata, name)
XYZ.xyz3-column X Y Z, NaN rows skipped

Wavenumber Convention

All frequency-domain operators share a unified wavenumber computation (+ops/wavenum.m):

$$k_x = \frac{2\pi}{n_x \cdot d} \cdot \text{fftAxis}(n_x), \quad k_y = \frac{2\pi}{n_y \cdot d} \cdot \text{fftAxis}(n_y), \quad |k| = \sqrt{k_x^2 + k_y^2}$$

The radial wavenumber already includes 2π (rad/m). Wavelength-to-wavenumber conversion: k = 2π / λ.

Parameter Cheat Sheet

OperatorKey ParameterStarting Point
Scatter interpolationmethod / cellsize / radiuskriging / 0(auto) / 0
Gaussian smoothsigma1–3
Upward continuationheight (m)500–2000
Field enhancementmethod / inc / decTHD
Euler deconvolutionsi / window1 / 10
Field separationmethod / scaleDoG / 5
FK filterklow / khigh / taper (rad/m)λ-dependent; taper=0.2
Radial spectrumnBins50
Normalizationmethod / outMin / outMaxlinear / -1 / 1

24 colormaps · NaN-safe frequency-domain operators · Batch failure isolation · Full cross-session state persistence.

About

2D geophysical data processing and visualization platform

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors