Fast Transient Imaging
A Python framework revolving around reconstruction of impulse responses from AMCW lidar measurements.
|
Functions | |
def | TimeToPhase (Time, Frequency) |
This function converts a time of flight in seconds to a phase in radians. More... | |
def | PhaseToTime (Phase, Frequency) |
This function converts a phase in radians to a time of flight in seconds. More... | |
def | GetPositiveArgument (NonZeroScalar) |
Given an array of non-zero, complex scalars this function returns their argument in radians between zero and two pi. More... | |
def | AddNoNoise (X) |
This function returns the given argument unchanged. More... | |
def | AddGaussianNoise (X, SignalToNoiseRatio) |
This function contaminates the given vector of positive, real values with noise from a Gaussian normal distribution. More... | |
def | GetNoisySinusoidalMeasurements (Distribution, BaseFrequency, FrequencyList, AddNoise) |
This function returns synthetic measurements with sinusoidal modulation (as complex phasor) and noise as specified. More... | |
def | RootsToDistribution (DiracDeltaLocations, BaseFrequency, iFrequencyBegin, Measurements) |
This function generates a real distribution (which is not guaranteed to have positive weights) describing the given measurements optimally while only having support at prescribed locations. More... | |
def | SPUMIC |
Implements "SPUMIC: Simultaneous Phase Unwrapping and Multipath Interference
Cancellation in Time-of-Flight Cameras Using Spectral Methods" by Kirmani et al. More... | |
def | BhandariSpectralEstimate (Distribution, BaseFrequency, iFrequencyBegin, iFrequencyEnd, AddNoise) |
Implements "Resolving Multipath Interference in Kinect: An Inverse Problem
Approach" by Bhandari et al. More... | |
def | SRA |
Implements "SRA: Fast Removal of General Multipath for ToF Sensors" by Freedman et al. More... | |
def | ClosedFormInverse (Distribution, BaseFrequency, iFrequencyBegin, AddNoise) |
Implements the technique with the Dirac-delta-based reconstruction in "Closed-form Inverses for the Mixed Pixel/Multipath Interference Problem in
AMCW Lidar" by Godbaz et al. More... | |
def | MaximumEntropySpectralEstimate (Distribution, BaseFrequency, nMoment, AddNoise, PhaseSampling=np.linspace(0.0, 2.0 *np.pi) |
Implements our proposed method for continuous reconstruction, i.e. More... | |
def | PisarenkoEstimate (Distribution, BaseFrequency, nMoment, AddNoise) |
Implements our proposed method for sparse reconstruction, i.e. More... | |
def RelatedWork.TimeToPhase | ( | Time, | |
Frequency | |||
) |
This function converts a time of flight in seconds to a phase in radians.
The frequency has to be given in Hertz.
def RelatedWork.PhaseToTime | ( | Phase, | |
Frequency | |||
) |
This function converts a phase in radians to a time of flight in seconds.
The frequency has to be given in Hertz.
def RelatedWork.GetPositiveArgument | ( | NonZeroScalar | ) |
Given an array of non-zero, complex scalars this function returns their argument in radians between zero and two pi.
def RelatedWork.AddNoNoise | ( | X | ) |
This function returns the given argument unchanged.
It can be passed as functor to techniques to test them with unperturbed input.
def RelatedWork.AddGaussianNoise | ( | X, | |
SignalToNoiseRatio | |||
) |
This function contaminates the given vector of positive, real values with noise from a Gaussian normal distribution.
The noise is independent for the various scalars. The returned signal has the given signal to noise ratio, i.e. the input is multiplied by a Gaussian with mean one and standard deviation 1.0/SignalToNoiseRatio.
def RelatedWork.GetNoisySinusoidalMeasurements | ( | Distribution, | |
BaseFrequency, | |||
FrequencyList, | |||
AddNoise | |||
) |
This function returns synthetic measurements with sinusoidal modulation (as complex phasor) and noise as specified.
Distribution | The ground truth as CFiniteDistribution parameterized over time of flight in seconds. |
BaseFrequency | The modulation frequency implied by iFrequencyBegin==1 in hertz. |
FrequencyList | A list giving the used multiples of the base frequency. |
AddNoise | A function that can be applied to an array of positive, real scalars holding brightness values measured by the virtual sensor to perturbate it. The perturbed array is returned. |
def RelatedWork.RootsToDistribution | ( | DiracDeltaLocations, | |
BaseFrequency, | |||
iFrequencyBegin, | |||
Measurements | |||
) |
This function generates a real distribution (which is not guaranteed to have positive weights) describing the given measurements optimally while only having support at prescribed locations.
DiracDeltaLocations | The admitted locations of points of support of the resulting distribution as complex values, i.e. the phases of the actual points of support are the positive arguments of these complex values and the magnitude is ignored. |
BaseFrequency | The base frequency used to define phase. |
iFrequencyBegin | The beginning of the range of frequencies found in Measurements. The end is implicitly defined by the shape of Measurements. |
Measurements | The (possibly noisy) measurements for the specified frequencies. See GetNoisySinusoidalMeasurements() for details. |
def RelatedWork.SPUMIC | ( | Distribution, | |
BaseFrequency, | |||
iFrequencyBegin, | |||
iFrequencyEnd, | |||
AddNoise, | |||
nDiracDelta = 2 |
|||
) |
Implements "SPUMIC: Simultaneous Phase Unwrapping and Multipath Interference Cancellation in Time-of-Flight Cameras Using Spectral Methods" by Kirmani et al.
Distribution,BaseFrequency,iFrequencyBegin,iFrequencyEnd,AddNoise | Forward to GetNoisySinusoidalMeasurements(). FrequencyList is range(iFrequencyBegin,iFrequencyEnd). |
nDiracDelta | The number of Dirac-delta pulses to be reconstructed. In the paper the technique is only formulated for two Dirac-deltas so no other values should be used for evaluation of the technique. |
def RelatedWork.BhandariSpectralEstimate | ( | Distribution, | |
BaseFrequency, | |||
iFrequencyBegin, | |||
iFrequencyEnd, | |||
AddNoise | |||
) |
Implements "Resolving Multipath Interference in Kinect: An Inverse Problem Approach" by Bhandari et al.
Distribution,BaseFrequency,iFrequencyBegin,iFrequencyEnd,AddNoise | Forward to GetNoisySinusoidalMeasurements(). FrequencyList is range(iFrequencyBegin,iFrequencyEnd) and must have an odd number of entries. |
def RelatedWork.SRA | ( | Distribution, | |
BaseFrequency, | |||
FrequencyList, | |||
AddNoise, | |||
nSample = 1000 , |
|||
CovarianceMatrix = None , |
|||
ErrorTolerance = 0.05 |
|||
) |
Implements "SRA: Fast Removal of General Multipath for ToF Sensors" by Freedman et al.
Distribution,BaseFrequency,FrequencyList,AddNoise | See GetNoisySinusoidalMeasurements(). |
nSample | The number of sample points to use for optimization of the impulse response. |
CovarianceMatrix | If given this has to be a Hermitian positive-definite matrix inducing the norm that is used to measure deviations from a perfect reconstruction in the data term. It must be real with twice as many rows and columns as there are entries in FrequencyList. The first half refers to cosine measurements, the second half to sine measurements. If no matrix is given, the identity matrix is used. |
ErrorTolerance | The scalar governing the relative error tolerance of the data term. |
def RelatedWork.ClosedFormInverse | ( | Distribution, | |
BaseFrequency, | |||
iFrequencyBegin, | |||
AddNoise | |||
) |
Implements the technique with the Dirac-delta-based reconstruction in "Closed-form Inverses for the Mixed Pixel/Multipath Interference Problem in AMCW Lidar" by Godbaz et al.
Distribution,BaseFrequency,iFrequencyBegin,AddNoise | Forward to GetNoisySinusoidalMeasurements(). FrequencyList is range(iFrequencyBegin,iFrequencyBegin+4). |
def RelatedWork.MaximumEntropySpectralEstimate | ( | Distribution, | |
BaseFrequency, | |||
nMoment, | |||
AddNoise, | |||
PhaseSampling = np.linspace(0.0,2.0*np.pi , |
|||
MinNormalizedEigenvalue = 4.0e-3 |
|||
) |
Implements our proposed method for continuous reconstruction, i.e.
the maximum entropy spectral estimate going back to John Parker Burg.
Distribution,BaseFrequency,nMoment,AddNoise | Forward to GetNoisySinusoidalMeasurements(). FrequencyList is range(nMoment+1), i.e. nMoment does not count the zeroth moment. |
PhaseSampling | A sampling of the interval from zero to two pi defining the locations where the returned distribution should be sampled. The returned distribution uses these values converted to time with respect to the given base frequency (see PhaseToTime()). If this sampling is not dense enough, this can lead to severe distortions of cumulative density for nearly sparse distributions. |
MinNormalizedEigenvalue | If necessary, the zeroth moment is biased to ensure that the smallest eigenvalue of the Toeplitz matrix divided by the zeroth moment has this value. |
def RelatedWork.PisarenkoEstimate | ( | Distribution, | |
BaseFrequency, | |||
nMoment, | |||
AddNoise | |||
) |
Implements our proposed method for sparse reconstruction, i.e.
the Pisarenko estimate.
Distribution,BaseFrequency,nMoment,AddNoise | Forward to GetNoisySinusoidalMeasurements(). iFrequencyBegin is one, iFrequencyEnd is nMoment+1, i.e. nMoment does not count the zeroth moment. |