public Image GetWaveletsImages( float[][] spectrum, IStride strideBetweenConsecutiveImages, int fingerprintLength, int overlap, int imagesPerRow) { List <float[][]> spetralImages = spectrumService.CutLogarithmizedSpectrum( spectrum, strideBetweenConsecutiveImages, fingerprintLength, overlap); waveletDecomposition.DecomposeImagesInPlace(spetralImages); int width = spetralImages[0].GetLength(0); int height = spetralImages[0][0].Length; int fingersCount = spetralImages.Count; int rowCount = (int)Math.Ceiling((float)fingersCount / imagesPerRow); int imageWidth = (imagesPerRow * (width + SpaceBetweenImages)) + SpaceBetweenImages; int imageHeight = (rowCount * (height + SpaceBetweenImages)) + SpaceBetweenImages; Bitmap image = new Bitmap(imageWidth, imageHeight, PixelFormat.Format16bppRgb565); SetBackground(image, Color.White); int verticalOffset = SpaceBetweenImages; int horizontalOffset = SpaceBetweenImages; int count = 0; foreach (float[][] spectralImage in spetralImages) { double average = spectralImage.Average(col => col.Average(v => Math.Abs(v))); for (int i = 0; i < width /*128*/; i++) { for (int j = 0; j < height /*32*/; j++) { Color color = ValueToBlackWhiteColor(spectralImage[i][j], average); image.SetPixel(i + horizontalOffset, j + verticalOffset, color); } } count++; if (count % imagesPerRow == 0) { verticalOffset += height + SpaceBetweenImages; horizontalOffset = SpaceBetweenImages; } else { horizontalOffset += width + SpaceBetweenImages; } } return(image); }
private List <bool[]> CreateFingerprintsFromLogSpectrum(float[][] logarithmizedSpectrum, IStride stride, int fingerprintLength, int overlap, int topWavelets) { List <float[][]> spectralImages = spectrumService.CutLogarithmizedSpectrum(logarithmizedSpectrum, stride, fingerprintLength, overlap); waveletDecomposition.DecomposeImagesInPlace(spectralImages); var fingerprints = new List <bool[]>(); foreach (var spectralImage in spectralImages) { bool[] image = fingerprintDescriptor.ExtractTopWavelets(spectralImage, topWavelets); if (!IsSilence(image)) { fingerprints.Add(image); } } return(fingerprints); }