/// <summary> /// A FALSE-COLOUR VERSION OF DECIBEL SPECTROGRAM /// Taken and adapted from Spectrogram Image 5 in the method of CLASS Audio2InputForConvCNN.cs:. /// </summary> /// <param name="dbSpectrogramData">the sonogram data (NOT noise reduced). </param> public static Image <Rgb24> DrawStandardSpectrogramInFalseColour(double[,] dbSpectrogramData) { // Do NOISE REDUCTION double noiseReductionParameter = 2.0; var tuple = SNR.NoiseReduce(dbSpectrogramData, NoiseReductionType.Standard, noiseReductionParameter); double[,] nrSpectrogramData = tuple.Item1; // store data matrix double ridgeThreshold = 2.5; double[,] matrix = dbSpectrogramData; byte[,] hits = RidgeDetection.Sobel5X5RidgeDetectionExperiment(matrix, ridgeThreshold); // ################### RESEARCH QUESTION: // I tried different EXPERIMENTS IN NORMALISATION //double min; double max; //DataTools.MinMax(spectralSelection, out min, out max); //double range = max - min; // readjust min and max to create the effect of contrast stretching. It enhances the spectrogram a bit //double fractionalStretching = 0.2; //min = min + (range * fractionalStretching); //max = max - (range * fractionalStretching); //range = max - min; // ULTIMATELY THE BEST APPROACH APPEARED TO BE FIXED NORMALISATION BOUNDS double truncateMin = -95.0; double truncateMax = -30.0; double filterCoefficient = 0.75; double[,] dbSpectrogramNorm = SpectrogramTools.NormaliseSpectrogramMatrix(dbSpectrogramData, truncateMin, truncateMax, filterCoefficient); truncateMin = 0; truncateMax = 50; // nr = noise reduced double[,] nrSpectrogramNorm = SpectrogramTools.NormaliseSpectrogramMatrix(nrSpectrogramData, truncateMin, truncateMax, filterCoefficient); nrSpectrogramNorm = MatrixTools.BoundMatrix(nrSpectrogramNorm, 0.0, 0.9); nrSpectrogramNorm = MatrixTools.SquareRootOfValues(nrSpectrogramNorm); nrSpectrogramNorm = DataTools.normalise(nrSpectrogramNorm); // create image from normalised data var image = SpectrogramTools.CreateFalseColourDecibelSpectrogramForZooming(dbSpectrogramNorm, nrSpectrogramNorm, hits); return(image); }