예제 #1
0
        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);
        }