public class TimeMarker2
extends java.lang.Object
Times for unknown samples are computed by solving an anisotropic eikonal equation grad(t) dot W grad(t) = 1, where W denotes a positive-definite (velocity-squared) metric tensor field. The solution times t represent the traveltimes from one known sample to all unknown samples. Separate solution times t are computed for each known sample that has at least one unknown neighbor. (Such a known sample is sometimes called a "source point.") The output time for each sample is the minimum time computed in this way for all such known samples. Therefore, the times output for unknown samples are the traveltimes to the closest known samples, where "closest" here means least time, not least distance.
As eikonal solutions t are computed for each known sample, the mark for that known sample is used to mark all unknown samples for which the solution time is smaller than the minimum time computed so far. If marks for known samples are distinct, then output marks for unknown samples indicate which known sample is closest. In this way output marks can represent a sampled Voronoi diagram, albeit one that has been generalized by replacing distance with time.
This transform uses an iterative sweeping method to solve for times. Iterations are similar to those described by Jeong and Whitaker (2007). Computational complexity is O(M log K), where M is the number of unknown (missing) samples and K is the number of known samples.
Modifier and Type | Class and Description |
---|---|
static class |
TimeMarker2.Concurrency
Type of concurrency used by this transform.
|
Constructor and Description |
---|
TimeMarker2(int n1,
int n2,
Tensors2 tensors)
Constructs a time marker for the specified tensor field.
|
Modifier and Type | Method and Description |
---|---|
void |
apply(float[][] times,
int[][] marks)
Transforms the specified array of times and marks.
|
void |
setConcurrency(TimeMarker2.Concurrency concurrency)
Sets the type of concurrency used to solve for times.
|
void |
setTensors(Tensors2 tensors)
Sets the tensors used by this time marker.
|
public TimeMarker2(int n1, int n2, Tensors2 tensors)
n1
- number of samples in 1st dimension.n2
- number of samples in 2nd dimension.tensors
- velocity-squared tensors.public void setTensors(Tensors2 tensors)
tensors
- the tensors.public void setConcurrency(TimeMarker2.Concurrency concurrency)
concurrency
- the type of concurrency.public void apply(float[][] times, int[][] marks)
times
- input/output array of times.marks
- input/output array of marks.