All work

ST-BEMD

A way to split 2-D signals such as fingerprints into their component layers, by bending the method along the ridges instead of treating every direction the same.

When
May–Jul 2026
What
Self-led project
Stack
Python, NumPy, SciPy
Links
Code on GitHub
A real fingerprint from SOCOFing, its ridge orientation map and its structure-tensor coherence map.

Why it exists

Empirical mode decomposition splits a signal into layers, from the finest detail to the slowest trend. The 2-D version builds its upper and lower envelopes by interpolating between local maxima and minima the same way in every direction.

On a signal with strong direction, like a fingerprint, that is wrong. The envelope averages peaks from neighbouring ridges, so orientation bleeds across them.

What I built

  1. Compute the structure tensor, which gives the local orientation and how strongly the image is oriented there (coherence).
  2. At each pixel, build an elliptical kernel stretched along the ridge. The stretch grows with coherence.
  3. Take the envelope as a kernel-weighted average of nearby extrema.

Where coherence is zero the kernel becomes a circle, so the method falls back to ordinary 2-D EMD exactly where orientation is undefined.

The original formulation, taken literally, stretches the kernel across the ridge instead of along it, which makes things worse. Getting that geometry right is the difference between 39.3° and 8.3° of orientation error on a real print.

I wrote all four baselines from scratch: BEMD with a global RBF, Pseudo-BEMD, Serial-EMD and DEMD.

Results

lower orientation error on 100 SOCOFing prints (12.87° to 8.27°)
35.7%
of 30 paired prints improved, Wilcoxon p = 1.9 × 10−9
100%
lower mean error on synthetic signals (3.08° to 1.83°)
40.6%
of the gain comes from the local envelope, not the anisotropy
78%
Left: orientation error for 30 prints, each with a blue isotropic point and an orange ST-BEMD point; every orange point is to the left. Right: error by ridge curvature, where both methods get worse but ST-BEMD stays lower.
Every one of 30 paired prints improves. Both methods get worse as ridges curve, and the gap holds across the range.

The local envelope is also faster, because it sums over a small window instead of solving a dense system over all extrema. How much faster depends heavily on the machine and the signal, so I don’t quote one multiplier.

What the numbers don’t say

The method changes two things at once, so I ran an ablation to separate them. About 78% of the gain comes from switching to a local averaged envelope, which is an existing idea, not from the anisotropy the method is named after. The anisotropy still helps on its own (better on 70% of prints, p = 0.001), but the effect is small, and it shrinks on highly curved ridges.