Module 03 got the analysis window lying along the bed, so
the traces inside it can finally be compared with each other. The next question is what "compared"
means. At least five different calculations all get called coherence. They measure different things, and on the same piece of data they can disagree completely: one will report a window as fully coherent where another reports an edge. Which calculation produced a volume has to be known before the volume can be read.
The analysis window — the same data every step uses
Change the traces — results update as you drag
How the traces differ
The shape of the wavelet stays exactly the same;
only how big it is changes from trace to trace. This happens constantly in real data — a bed
thins, porosity changes, the reflection gets weaker.
Now the wavelet is rotated a little more on each
trace, so the traces are genuinely different shapes rather than different sizes. Watch which attributes respond to this and which responded to the slider above.
Noise and gain
Turns the whole window up or down together. Nothing
about the traces' agreement changes, so watch which numbers stay put and which move.
The window itself
Work through the six steps in order, then try the exercises.
Terminology and method are there when you want them.
1How similar are two traces?
Before any equation, decide what your eye says
Four pairs of traces. Look at each one and decide, before you read a single number, whether you would
call them similar. Case 3 is the one to weigh: the shape is identical and only the size differs. Whether that counts as similar has no single answer, and the answer a reader gives decides which attribute suits their purpose.
Both traces are drawn on the same axis so you can see the
answer rather than work it out. Where the two lines lie on top of each other the traces agree; where
they come apart they do not.
Normalized crosscorrelation at zero lag—
Semblance of the pair—
What the two numbers disagree about—
Crosscorrelation is normalized by the energy of each trace separately, so it ignores a change of
scale. Semblance is not, so it does not. Neither is right; they answer different questions, and that difference runs through everything below.
2From two traces to a window
The question becomes: are these one event?
Real attributes do not work on pairs of traces. They work on a window of several at once, laid along
the bed using the dip field from modules 01 to 03. The question becomes: can this whole window be
described as one seismic event? Two long-standing ways of answering that are below, and the sliders
above let you change the window in different ways to see how each one responds.
Amplitude changes sideways. The shape of the wavelet stays exactly the same; only how big
it is changes from trace to trace. This happens constantly in real data — a bed thins, porosity
changes, the reflection gets weaker.
The shape itself changes. Now the wavelet is rotated a little more on each trace, so the traces are genuinely different shapes rather than different sizes. Watch which attributes respond to this and which responded to the slider above.
Noise, because real traces never match perfectly, and it is worth knowing how much of the
disagreement is only noise.
Overall amplitude turns the whole window up or down together. Nothing about how well the
traces agree has changed, so watch which numbers stay put and which move.
Traces used and window height set how much data each answer rests on.
2 Semblance and variance
the same information, stated two ways round
Semblance—
Variance (the normalized form, 1 − semblance)—
Raw variance about the mean trace—
Why the raw number is a problem—
A note on the word. Semblance and variance here are two ways of saying the same thing:
variance is what is left over when semblance is subtracted from one, so a coherent window has high
semblance and low variance. Packages that display a "variance" attribute display this normalized
form. The raw statistical variance shown above is a different quantity — it depends on how loud the
data is, not just on how well the traces match — which is why it is not used directly.
3One matrix underneath all of it
The covariance matrix and its eigenvalues
Here is the idea that ties nearly all of these attributes together. Except for the Sobel filter, every
one of them is built from a single object: a covariance matrix. Entry C(m,n) is trace m multiplied by trace n, sample by sample, summed
down the window. A window of J traces gives a J-by-J table of those products, and the diagonal
C(m,m) is simply the energy of trace m. Two traces that rise and fall together
give a large positive entry; two that are unrelated give an entry near zero. The matrix is built from
the analytic trace, meaning the amplitude together with its Hilbert transform, which keeps the
estimate steady where the amplitude happens to pass through zero.
What an eigenvector is, for this purpose. Ask a different question: is there a single waveform
that, scaled up or down trace by trace, could account for the whole window? An eigenvector is a
candidate set of those scale factors — one weight per trace. The first eigenvector is the set
of weights that accounts for as much of the window's energy as any set can, and it is what panel 3
draws: read it as "trace 1 needs this much of the common waveform, trace 2 this much", and so on.
And an eigenvalue is how much that explained. Each eigenvector comes with a number saying how
much of the total energy it accounts for, and the numbers add up to the total. So if one waveform
really does describe the window, λ₁ takes nearly everything and the rest are near zero. If the traces
are unrelated, no single waveform helps much and the energy is spread across all of them. Panel 2
shows each eigenvalue as a share of the total, which is why the bars always sum to 1.
1 The covariance matrix
J × J, one cell per pair of traces
2 Its eigenvalues
how the energy is distributed
3 The first eigenvector
the common pattern across the traces
Total energy in the window—
λ₁ as a share of the total—
λ₂ as a share—
Reading the eigenvalues—
4One equation, three named attributes
The difference is a single vector
AASPI defines outer-product similarity as c = rᵀ C r / E, where C is the
covariance matrix from step 3, E is the total energy in the window, and r is a test vector: one
weight per trace, the same shape as an eigenvector.
Read it as a question. You are proposing a set of weights and asking how much of the window's energy
that proposal accounts for. The quantity rᵀ C r is the energy explained by your
proposal; dividing by E turns it into a fraction between 0 and 1. So the answer is always "this share
of the window is described by the pattern I suggested".
Several attributes that were published separately, under different names and in
different decades, turn out to be this one equation with different proposals for r.
Propose that every trace contributes equally — r a constant vector —
and the answer is a semblance estimate of coherence. You are asking how much of the window is
explained by the traces simply being the same as each other.
Propose the first eigenvector, which step 3 showed is the best possible
set of weights, and the answer is eigenstructure coherence. Since no proposal can explain
more, this is the largest value the equation can return, and it works out to λ₁ divided by the sum
of the eigenvalues.
Propose the center sample vector and you get the third option AASPI offers. That name
needs unpacking. Pick the one sample you are actually computing the attribute at, and read the
amplitude of every trace in the window at that instant — five traces gives five numbers. Those
numbers are the center sample vector. Using them as r asks a pointed question: how much of the whole
window looks like this one instant across the traces? It costs nothing to compute, because you
already have those amplitudes, whereas the first eigenvector has to be solved for.
Try each in turn and watch the weights in panel 1 change shape. On clean data all three land in
much the same place; it is when the window is noisy or the amplitudes vary that they separate.
1 The test vector you chose
one weight per trace
2 The whole family on this window
same data, same window, same matrix
Energy-ratio coherence is the energy of the Karhunen–Loève filtered data over the total energy.
The Karhunen–Loève filter rebuilds the window from its first L eigenvectors alone and throws the rest
away, so it is a way of keeping only the part of the window that several traces have in common.
Because the eigenvectors are orthonormal, keeping L components retains exactly the first L
eigenvalues, so with L = 1 it is numerically identical to eigenstructure coherence. Raise L and
everything starts to look coherent, because you are keeping more of the window as "signal".
Outer product with your r—
Semblance—
Eigenstructure—
Energy ratio at this L—
Where they disagree—
5Sobel: the one that is not a covariance
An image-processing edge detector, steered along dip
This one is the odd one out, and it is worth knowing why. The Sobel filter comes from image
processing, not from seismic statistics. AASPI describes its version as the magnitude of the inline and crossline derivatives of amplitude along structural dip,
normalized by the same derivatives taken on absolute values. It never builds a covariance matrix and
it has no concept of a common waveform. It simply asks how fast amplitude is changing sideways, which
makes it respond strongly to a change in size that the eigenvalue-based attributes ignore entirely.
Sign convention. Written out as an edge detector, the equation gives a value near 0
where the traces are identical and near 1 across an edge. Displayed as a similarity, where 1 means
coherent, it is one minus that. Both are shown here because either can turn up under the name
sobel_filter_similarity, and reading a map with the sign the wrong way round
turns every fault into a background and every background into a fault. This 2D page implements the
inline term only; a 3D implementation uses inline and crossline.
6The same data, five problems, five attributes
Where the algorithms part company
One synthetic line, flat-lying so that steering is not a factor, divided into five
zones of forty traces each. The zones are boxed and named along the top. Every zone has a sharp edge down its
middle — vertical in zones 2, 3 and 4, and a realistically dipping fault plane in zone 5 — and every edge is a different kind of problem: zone 1 has no problem at all and is the
control, zone 2 changes amplitude across the edge without changing the waveform, zone 3 changes the
waveform without changing its size, zone 4 has noise added to its right-hand half, and zone 5 is a
fault with 16 ms of throw. Every attribute is computed at every sample with the same window.
A note on the L slider before you reach for it. The
window here holds five traces, so five principal components describe it completely. Keeping all five
reconstructs the window exactly and the energy ratio is 1.000 everywhere by definition; keeping four
is already within half a percent of that across the whole line. The panel goes uniformly white, and
that is the attribute reporting that it has stopped distinguishing anything rather than the display
failing. The readout under the panel gives the range, so the collapse can be watched as a number
rather than guessed at from a blank rectangle. L = 1 and L = 2 are where the attribute does
something.
Range of the displayed attribute across the line—
What the panel is showing—
Two of these five are copies, and that is the point. Variance here is defined as one
minus semblance, so it correlates with semblance at exactly −1.000: the same volume with the
sign flipped, adding no information whatever. Energy ratio at L = 1 is mathematically
identical to eigenstructure — not similar, identical, agreeing to the last bit at every one of
the 8,500 samples on this line. Raise L above 1 with the slider above and they separate: at the fault,
energy ratio climbs toward 1 as L goes 1, 2, 3 while eigenstructure stays where it was, and across
the whole line their correlation falls to around two thirds. Zone 2 is the exception and worth pausing on
— its covariance matrix is rank one, so there is no second eigenvalue for a second component
to keep, and no value of L changes anything. Sobel is the interesting near-copy: allowing for its
opposite sign it tracks semblance at about 0.95, because both are amplitude-sensitive, so on this
data it carries almost the same information by a completely different route. The genuinely
independent pair is semblance against eigenstructure, which correlate at around 0.85 — high, but
the lowest figure on the page. Running five of them does not give five independent measurements.
This step has its own model and its own controls, which is why the analysis-window panel at the
top of the module is not shown here: amplitude change, phase rotation and the rest describe the
single window of steps 2 to 5, and there is no single window on this line. The two controls above
the panel are the ones that apply.
Semblance, eigenstructure and energy ratio run 0 to 1 and share a gray scale, so they can be
compared directly. Variance runs the other way, dark where the others are light, because it is what
is left when semblance is taken from one. The Sobel panel cannot: it is an edge response, high where the others
are low, and it is plotted on its own scale. Putting a common color bar on attributes that do not
share a range or a sign is one of the easiest ways to mislead yourself.
At the amplitude step, zone 2—
At the fault, zone 5—
What that means when you choose one—
?Why the choice of algorithm is yours to make
What these attributes are used for, and how they mislead
Coherence is the most heavily used discontinuity attribute in structural interpretation. It is what turns a volume into
a fault map, and on a time slice it does something no vertical section can: it shows a fault's
trace, the line it makes in map view, so you can follow it, see where it branches, and see
how it relates to its neighbors.
What it is used for
Faults. Mapping them, counting them, and feeding them to an automatic fault extractor. Most
fault-surface software takes a discontinuity volume as its input, so the quality of your coherence
sets the ceiling on the quality of the fault framework.
Channels, fans and reef margins. A channel edge is a discontinuity even where there is no
structural relief at all, which is why a coherence time slice can show a meander belt in a single
picture.
Data quality control. Several processing and acquisition problems show up as coherence
anomalies: acquisition footprint (a regular pattern left by the shot and receiver geometry), bad
traces, migration smiles (arcs left where migration was run with the wrong velocity) and statics
problems (trace-to-trace time shifts from the near surface). They show up in patterns — regular
stripes, survey-edge effects, a single dark trace — that geology does not make.
As an input to other things. Coherent energy from the same calculation drives amplitude
curvature in module 07, and coherence is a standard input to fault-likelihood volumes and to
structure-oriented filtering.
Which one to run
The practical question is which one to run. The dividing line is
amplitude. Energy ratio and eigenstructure are blind to a pure change of amplitude; semblance
and Sobel are not. So:
Mapping faults, especially where reflection strength fades into the fault zone: the
eigenvalue-based attributes hold the edge together where semblance blurs it.
Mapping internal architecture in a thin channel, where the waveform is constant and only
the amplitude changes: energy ratio will show you nothing and semblance will show you the edges.
Step 6 has energy ratio reading exactly 1.000 at an amplitude edge that semblance calls about 0.8.
Not sure: run two and compare. Where they agree you have a discontinuity in both waveform and
amplitude; where they disagree, the disagreement itself tells you which one it is.
And the discipline that goes with it
Low coherence means one thing only: the traces in this window stopped looking alike.
Zone 4 in step 6 shows why: every attribute goes dark there, and there is no fault,
no stratigraphic edge and no geology of any kind, only noise. Nothing in the number distinguishes it
from the fault two zones along.
So a dark lineament earns its interpretation from context rather than from its value:
whether it is planar, whether it persists across many time slices, whether it lines up with structure
you can see on the section, and whether it behaves the way the different algorithms predict it should.
A number without its algorithm, its window and its dip field is not interpretable.
None of these attributes finds faults. They find places where neighboring
traces disagree. Deciding which of those places are faults is the interpretation, and it is
yours.
Exercises
Make the two attributes disagree completely. In step 2, set the amplitude change to 65%
and leave the waveform change at zero. Then read semblance and eigenstructure in step 4.
HintEigenstructure and energy ratio read exactly 1.000 while semblance reads about
0.9. Push the amplitude change to 80% and semblance falls further while the other two do not
move at all.
This is not a bug in either. If every trace is the same waveform at a different size, the whole
window is one pattern scaled trace by trace, so the covariance matrix has a single non-zero
eigenvalue and the eigenvalue-based attributes correctly report one coherent event. Semblance
compares each trace with the average trace, and a half-size trace is not the average trace.
AASPI states this explicitly: energy ratio measures lateral changes in waveform but is
independent of amplitude, while semblance is sensitive to both.
Watch the eigenvalues collapse to one. With the amplitude change still at 65%, look at
the eigenvalue panel in step 3.
Hintλ₁ holds essentially all the energy and λ₂ onwards are at the level of rounding
error: the readout shows λ₁ holding 100.00% of the energy and λ₂ holding 0.00%. The matrix is
rank one. That is the mathematical statement of "same waveform, different size", and it is why
the ratio λ₁ / Σλ cannot see the amplitude change. Now add a waveform change and a second eigenvalue becomes non-zero immediately.
Turn the gain up and down. First set the waveform change to about 40°, so that there is
something for the variance to measure. Then move the overall amplitude slider from 0.2 to 3 and
watch the three numbers underneath.
HintSemblance does not move, and neither does the normalized variance, because both
are ratios of energies and the scale cancels exactly. The raw variance changes by a factor of
225 over the sweep, which is 15 squared — the gain slider spans a factor of 15, and variance
goes as the square of amplitude. That is why raw statistical
variance is not usable as a seismic attribute and why packages displaying "variance" display a
normalized form. It is also the reminder that a bright reflector and a dim one can be equally
coherent.
Raise L and watch coherence appear from nowhere. In step 4, set the noise in step 2 to
about 40% and then move L from 1 to 3.
HintEnergy ratio climbs from under 0.8 at L = 1 to nearly 1 by L = 3, without the
data changing at all. Keeping more principal components means calling more of the window "signal", so of course
more of it looks coherent. AASPI notes that for small windows of 5 or 9 traces the first
component usually represents more than 95% of the variability, and that L = 2 or 3 is intended
for windows of 25 traces or more. Using a large L on a small window removes the anomaly being looked for.
Find the case where they rank the opposite way round. In step 6, compare zone 2 with
zone 5 across all five attributes.
HintAt the amplitude edge semblance reads about 0.8 and energy ratio exactly 1.00:
semblance sees an edge, energy ratio sees nothing at all. At the fault semblance drops below 0.5
while energy ratio stays above 0.8: both see something, but semblance far more strongly. So the two attributes do not simply differ
in sharpness, they order the two features differently. If you are mapping architectural elements
inside a thin channel, where the waveform is constant and only amplitude changes, energy ratio
will show you nothing and semblance will show you the edges — which is exactly the end member
AASPI identifies.
Check that low coherence is not the same as a fault. In step 6, look at the noise zone in
each attribute.
HintEvery attribute goes dark in zone 4, and there is no fault there, no
stratigraphic edge and no geology of any kind — only noise. Nothing in the number distinguishes
it from zone 5. That distinction has to come from you, from the seismic itself, and from whether
the anomaly is planar, laterally persistent and consistent between attributes.
The main points
Coherence names a family, not a formula. Semblance, eigenstructure, energy ratio, variance
and Sobel all get called coherence and all measure something different.
Most of them are one equation with a different test vector. Outer-product similarity with
a constant vector is semblance; with the first eigenvector it is eigenstructure.
The dividing line is amplitude. Eigenstructure and energy ratio are blind to a pure change
of amplitude; semblance and Sobel are not. Which behavior you want depends on what you are
mapping.
A number without its algorithm is not interpretable. "Coherence is 0.8" says nothing
until you know which one, over what window, with what L.
Low coherence means a local loss of waveform similarity, nothing more. Faults are one
cause. Noise, acquisition footprint, processing artifacts, amplitude changes, tuning effects
(interference between reflections from a bed thinner than the wavelet) and a poor dip estimate
all produce it too.
Do not share a color bar between attributes that do not share a range or a sign. An edge
response and a similarity are not the same quantity even when both happen to run 0 to 1.
?Terminology, and who owns which word
These names are not standardized
AASPI notes that the coherence family acquired many of its names to avoid conflicts with the original
Amoco patents rather than because the algorithms differ. Check which definition your software means
before comparing two volumes or two papers.
Term
What it means here
Whose word
Method, sources, and what has been simplified
Source. The definitions on this page are taken from AASPI, Geometric Attributes: Program
similarity3d, Attribute-Assisted Seismic Processing and Interpretation, University of Oklahoma,
13 June 2022, and are cited by that document's equation numbers below. Nothing here has been
substituted for something easier to implement.
Covariance matrix, equations 1a and 1b: built from 2K+1 sample vectors through the amplitude
and a further 2K+1 through its Hilbert transform. The quadrature vectors occupy the same window, so
they do not change vertical resolution, but they stabilize the estimate near amplitude zero crossings
and suppress the artifact known as structural leakage. The optional per-sample taper of equation 1b
and the sample-vector balancing option are not implemented here.
Semblance, equation 11: the energy of the average trace over the average of the energies of
the individual traces. Outer-product similarity, equation 12: c = rᵀCr / E_tot, with the test
vector of equation 13 giving semblance and r = v⁽¹⁾ giving eigenstructure. Eigenstructure
coherence, equation 9, from Gersztenkorn and Marfurt (1999): λ₁ / Σλⱼ. Energy-ratio
coherence, equation 10: E_coh / E_tot, with the two energies defined by equations 7 and 8.
One derivation is mine, not the document's. AASPI describes energy ratio as closely related to
but slightly more general than eigenstructure. Because the eigenvectors are orthonormal, the energy
retained by keeping the first L principal components is exactly the sum of the first L eigenvalues, so
for an untapered, unbalanced window the two are numerically identical at L = 1. The extra generality
is L > 1 and the tapered, balanced windows used for data-adaptive analysis. This page computes energy
ratio that way; the equality is checked to nine decimal places.
Sobel-filter similarity, equation 15, with two departures stated in step 5. This is a 2D
page, so only the inline derivative term exists where a 3D implementation uses inline and crossline.
And the equation as written returns a value near zero for identical traces, which makes it an edge
response rather than a similarity; the similarity form is one minus it. Both are displayed rather
than picking one, because the sign a package uses is not something you can infer from the name.
Where the family starts. Bahorich and Farmer (1995) introduced the first member of it, a
crosscorrelation coherence: correlate the trace at the analysis point against its inline and
crossline neighbors, take the peak of each correlation over a range of lags, and combine the two.
Using three traces made it cheap enough to run on a whole volume in 1995, and the lag search was
doing the job that a dip field does in every later member. It is not implemented here — the
semblance scan of module 01 is the same idea done better — but it is where the names in the
terminology table come from.
Variance is not an AASPI attribute. Program similarity3d does not output one. AASPI lists
variance among the names the coherence family has acquired, some algorithmic and some simply renaming.
The normalized form shown here follows the generic usage described in the SEG Wiki entry on coherence,
where variance is mathematically close to 1 − semblance. The raw statistical variance is shown
alongside it only to demonstrate why the normalized form is the one that gets used.
Other simplifications. The line in step 6 is flat, so dip steering is not a factor and the
module can concentrate on the comparison; module 03 covers what happens otherwise. The multispectral
forms, the amplitude gradients, the Laplacian filters, the data-adaptive windows and the
structure-oriented filtering that similarity3d also provides are all left out.
AASPI, 2022, Geometric Attributes: Program similarity3d: University of Oklahoma —
documentation (pdf).
Bahorich, M. S., and S. L. Farmer, 1995, 3D seismic coherency for faults and stratigraphic
features: The Leading Edge, 14, 1053–1058.
Marfurt, K. J., R. L. Kirlin, S. L. Farmer, and M. S. Bahorich, 1998, 3-D seismic attributes using
a semblance-based coherency algorithm: Geophysics, 63, 1150–1165.
Gersztenkorn, A., and K. J. Marfurt, 1999, Eigenstructure-based coherence computation as an aid to
3-D structural and stratigraphic mapping: Geophysics, 64, 1468–1479.
Luo, Y., S. al-Dossary, M. Marhoon, and M. Alfaraj, 2003, Generalized Hilbert transform and its
application in geophysics: The Leading Edge, 22, 198–202.
Chopra, S., and K. J. Marfurt, 2007, Seismic Attributes for Prospect Identification and
Reservoir Characterization: SEG Geophysical Development Series, 11.
Kirlin, R. L., and W. J. Done, 1999, Covariance Analysis for Seismic Signal Processing:
SEG Geophysical Developments Series.
Barnes, A. E., 2007, Redundant and useless seismic attributes: Geophysics, 72, P33–P38.
Coherence asks whether the reflector is broken. The next module asks whether it is bent. Curvature is
the rate at which the dip field of modules 01 to 03 changes from trace to trace, so it responds to
folds and flexures that coherence is blind to, including faults too small to break a reflector.