internal IEnumerable <Fingerprint> CreateOriginalFingerprintsFromFrames(IEnumerable <Frame> frames, FingerprintConfiguration configuration) { var fingerprints = new ConcurrentBag <Fingerprint>(); var images = frames.ToList(); if (!images.Any()) { return(Enumerable.Empty <Fingerprint>()); } var length = images.First().Length; Parallel.ForEach(images, () => new ushort[length], (frame, loop, cachedIndexes) => { float[] rowCols = configuration.OriginalPointSaveTransform != null ? frame.GetImageRowColsCopy() : frame.ImageRowCols; waveletDecomposition.DecomposeImageInPlace(rowCols, frame.Rows, frame.Cols, configuration.HaarWaveletNorm); RangeUtils.PopulateIndexes(length, cachedIndexes); var image = fingerprintDescriptor.ExtractTopWavelets(rowCols, configuration.TopWavelets, cachedIndexes); if (!image.IsSilence()) { fingerprints.Add(new Fingerprint(image, frame.StartsAt, frame.SequenceNumber)); } return(cachedIndexes); }, cachedIndexes => { }); return(fingerprints.ToList()); }
public List <Fingerprint> CreateFingerprintsFromLogSpectrum(IEnumerable <SpectralImage> spectralImages, FingerprintConfiguration configuration) { var fingerprints = new ConcurrentBag <Fingerprint>(); var spectrumLength = configuration.SpectrogramConfig.ImageLength * configuration.SpectrogramConfig.LogBins; Parallel.ForEach(spectralImages, () => new ushort[spectrumLength], (spectralImage, loop, cachedIndexes) => { waveletDecomposition.DecomposeImageInPlace(spectralImage.Image, spectralImage.Rows, spectralImage.Cols, configuration.HaarWaveletNorm); RangeUtils.PopulateIndexes(spectrumLength, cachedIndexes); var image = fingerprintDescriptor.ExtractTopWavelets(spectralImage.Image, configuration.TopWavelets, cachedIndexes); if (!image.IsSilence()) { fingerprints.Add(new Fingerprint(image, spectralImage.StartsAt, spectralImage.SequenceNumber)); } return(cachedIndexes); }, cachedIndexes => { }); return(fingerprints.ToList()); }
internal IEnumerable <Fingerprint> CreateOriginalFingerprintsFromFrames(IEnumerable <Frame> frames, FingerprintConfiguration configuration) { var normalized = configuration.FrameNormalizationTransform.Normalize(frames); var blurred = configuration.GaussianBlurConfiguration.GaussianFilter switch { GaussianFilter.None => normalized, _ => BlurFrames(normalized, configuration.GaussianBlurConfiguration) }; var images = blurred.ToList(); if (!images.Any()) { return(Enumerable.Empty <Fingerprint>()); } var fingerprints = new ConcurrentBag <Fingerprint>(); var length = images.First().Length; var saveTransform = configuration.OriginalPointSaveTransform; Parallel.ForEach(images, () => new ushort[length], (frame, loop, cachedIndexes) => { byte[] originalPoint = saveTransform(frame); float[] rowCols = frame.ImageRowCols; waveletDecomposition.DecomposeImageInPlace(rowCols, frame.Rows, frame.Cols, configuration.HaarWaveletNorm); RangeUtils.PopulateIndexes(length, cachedIndexes); var image = fingerprintDescriptor.ExtractTopWavelets(rowCols, configuration.TopWavelets, cachedIndexes); if (!image.IsSilence()) { fingerprints.Add(new Fingerprint(image, frame.StartsAt, frame.SequenceNumber, originalPoint)); } return(cachedIndexes); }, cachedIndexes => { }); return(fingerprints.ToList()); }