Ejemplo n.º 1
0
        public static void GetGlobalOtsuThreshold(double[,] inputMatrix, out byte[,] opByteMatrix, out double opThreshold, out Image <Rgb24> histogramImage)
        {
            if (inputMatrix == null)
            {
                throw new ArgumentNullException(nameof(inputMatrix));
            }

            var normMatrix = MatrixTools.NormaliseInZeroOne(inputMatrix, out var min, out var max);
            var byteMatrix = MatrixTools.ConvertMatrixOfDouble2Byte(normMatrix);

            GetOtsuThreshold(byteMatrix, out opByteMatrix, out var threshold, out histogramImage);
            opThreshold = threshold / (double)byte.MaxValue;
            opThreshold = min + (opThreshold * (max - min));
        }
Ejemplo n.º 2
0
        // ################################# STATIC METHODS BELOW HERE ###############################

        public static Image DrawSpectrogramAnnotated(double[,] data, SpectrogramSettings config, SpectrogramAttributes attributes)
        {
            // normalise the data between 0 and 95th percentiles
            int    binCount = 100;
            double min;
            double max;

            DataTools.MinMax(data, out min, out max);
            double binWidth  = (max - min) / binCount;
            var    histogram = Histogram.Histo(data, binCount, min, max, binWidth);

            int    percentile   = 95;
            int    binId        = Histogram.GetPercentileBin(histogram, percentile);
            double upperBound   = min + (binId * percentile);
            var    normedMatrix = MatrixTools.NormaliseInZeroOne(data, min, upperBound);

            /*
             * int minPercentile = 5;
             * int minBinId = Histogram.GetPercentileBin(histogram, minPercentile);
             * double lowerBound = min + (minBinId * minPercentile);
             * int maxPercentile = 95;
             * int maxBinId = Histogram.GetPercentileBin(histogram, maxPercentile);
             * double upperBound = min + (maxBinId * maxPercentile);
             * var normedMatrix = MatrixTools.NormaliseInZeroOne(data, lowerBound, upperBound);
             */
            int nyquist   = attributes.NyquistFrequency;
            int frameSize = config.WindowSize;

            // assuming linear frequency scale
            int finalBinCount = frameSize / 2;
            var scaleType     = FreqScaleType.Linear;

            // if doing mel scale then
            if (config.DoMelScale)
            {
                finalBinCount = 256; //128; //512; // 256; // 100; // 40; // 200; //
                scaleType     = FreqScaleType.Mel;
            }

            var freqScale = new FrequencyScale(scaleType, nyquist, frameSize, finalBinCount, hertzGridInterval: 1000);

            var image          = SpectrogramTools.GetImage(normedMatrix, nyquist, config.DoMelScale);
            var annotatedImage = SpectrogramTools.GetImageFullyAnnotated(image, config.SourceFileName + ": " + scaleType.ToString(), freqScale.GridLineLocations, attributes.Duration);

            return(annotatedImage);
        }
 /// <summary>
 /// Used to normalise a spectrogram in 0,1.
 /// </summary>
 /// <param name="matrix">the spectrogram data.</param>
 /// <param name="truncateMin">set all values above to 1.0.</param>
 /// <param name="truncateMax">set all values below to zero.</param>
 /// <param name="backgroundFilterCoeff">used to de-emphisize the background.</param>
 /// <returns>a normalised matrix of spectrogram data.</returns>
 public static double[,] NormaliseSpectrogramMatrix(double[,] matrix, double truncateMin, double truncateMax, double backgroundFilterCoeff)
 {
     double[,] m = MatrixTools.NormaliseInZeroOne(matrix, truncateMin, truncateMax);
     m           = MatrixTools.FilterBackgroundValues(m, backgroundFilterCoeff); // to de-demphasize the background small values
     return(m);
 }
Ejemplo n.º 4
0
        //############################################################################################################################################################
        //############################################################################################################################################################

        public static double[,] NormaliseSpectrogramMatrix(IndexProperties indexProperties, double[,] matrix, double backgroundFilterCoeff)
        {
            matrix = MatrixTools.NormaliseInZeroOne(matrix, indexProperties.NormMin, indexProperties.NormMax);
            matrix = MatrixTools.FilterBackgroundValues(matrix, backgroundFilterCoeff); // to de-demphasize the background small values
            return(matrix);
        }