public void ApplyMedianFilterFromFileTest()
        {
            // preperation

            FileStream inputFile          = new FileStream("..\\..\\..\\Resources\\OriginalCat.bmp", FileMode.Open, FileAccess.Read);
            FileStream expectedOutputFile = new FileStream("..\\..\\..\\Resources\\MedianFilterCat.bmp", FileMode.Open, FileAccess.Read);

            byte[] temp = new byte[54];
            inputFile.Read(temp, 0, 54);
            BMPFileHeader bmpInfo = new BMPFileHeader(temp);
            MedianFilter  image   = new MedianFilter(bmpInfo, inputFile);

            // checking

            image.ApplyMedianFilter();
            byte[] outputFile = new byte[bmpInfo.FileSize];
            image.WriteImage(outputFile);

            for (uint i = 0; i < bmpInfo.FileSize; i++)
            {
                Assert.IsTrue(outputFile[i] == (byte)expectedOutputFile.ReadByte());
            }

            inputFile.Close();
            expectedOutputFile.Close();
        }
Пример #2
0
 private void Start()
 {
     sharpness        = FindObjectOfType <MatrixFilter>();
     linearCorrection = FindObjectOfType <LinearCorrection>();
     blackWhite       = FindObjectOfType <BlackWhite>();
     medianFilter     = FindObjectOfType <MedianFilter>();
 }
Пример #3
0
        public void CanGetValidMedianFiltration()
        {
            //Arrange
            MedianFilter filter = new MedianFilter();

            double[] input1  = { 2, 80, 6, 3 };
            int      window1 = 3;

            double[] reference1 = { 2, 6, 6, 3 };

            double[] input2  = { 17, 38, 9, 63, 41, 15 };
            int      window2 = 4;

            double[] reference2 = { 17, 17, 27.5, 39.5, 28, 28 };

            double[] input3  = { 7, 100, 1, 33, 12, 1, 56 };
            int      window3 = 5;

            double[] reference3 = { 7, 7, 12, 12, 12, 33, 56 };

            //Action
            double[] result1 = filter.GetMedianFiltration(input1, window1);

            double[] result2 = filter.GetMedianFiltration(input2, window2);

            double[] result3 = filter.GetMedianFiltration(input3, window3);

            //Assert
            CollectionAssert.AreEqual(reference1, result1);
            CollectionAssert.AreEqual(reference2, result2);
            CollectionAssert.AreEqual(reference3, result3);
        }
Пример #4
0
        public MedianFilters()
        {
            _signal = new WhiteNoiseBuilder().OfLength(N).Build();

            _filter  = new MedianFilter(15);
            _filter2 = new MedianFilter2(15);
        }
Пример #5
0
        public static void Run()
        {
            // ExStart:ApplyingCorrectionFilters
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_OCR();
            // Initialize an instance of OcrEngine
            OcrEngine ocrEngine = new OcrEngine();

            // Set Image property by loading an image from file path
            ocrEngine.Image = ImageStream.FromFile(dataDir + "Sampleocr.bmp");

            // Create CorrectionFilters collection
            CorrectionFilters filters = new CorrectionFilters();
            Filter            filter  = null;

            // Initialize Median filter
            filter = new MedianFilter(5);
            filters.Add(filter);

            // Create Gaussian Blur filter
            filter = new GaussBlurFilter();
            filters.Add(filter);

            // Assign collection to OcrEngine
            ocrEngine.Config.CorrectionFilters = filters;

            // Run recognition process
            if (ocrEngine.Process())
            {
                // Display results
                Console.WriteLine(ocrEngine.Text);
            }
            // ExEnd:ApplyingCorrectionFilters
        }
        private void MedianFilter_Click(object sender, EventArgs e)
        {
            var bitmap       = GetPictureBox().Image;
            var medianFilter = new MedianFilter();

            pictureBox5.Image = medianFilter.Filter((Bitmap)bitmap, trackBar1.Value);
        }
Пример #7
0
        public static IFilter Create(string filterKey)
        {
            IFilter result = null;
            switch (filterKey)
            {
                case "Median":
                    result = new MedianFilter();
                    break;

                case "Monochrome":
                    result = new MonochromeFilter();
                    break;

                case "Sharpen":
                    result = new SharpenFilter();
                    break;
                case "Boundary":
                    result = new Boundary();
                    break;
                case "Otzu":
                    result = new Otcu();
                    break;
            }

            return result;
        }
Пример #8
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="fftSize"></param>
        /// <param name="hopSize"></param>
        /// <param name="harmonicWinSize"></param>
        /// <param name="percussiveWinSize"></param>
        /// <param name="masking"></param>
        public HarmonicPercussiveSeparator(int fftSize           = 2048,
                                           int hopSize           = 512,
                                           int harmonicWinSize   = 17,
                                           int percussiveWinSize = 17,
                                           HpsMasking masking    = HpsMasking.WienerOrder2)
        {
            _stft = new Stft(fftSize, hopSize);

            _medianHarmonic   = new MedianFilter(harmonicWinSize);
            _medianPercussive = new MedianFilter(percussiveWinSize);

            switch (masking)
            {
            case HpsMasking.Binary:
                _mask = BinaryMask;
                break;

            case HpsMasking.WienerOrder1:
                _mask = WienerMask1;
                break;

            default:
                _mask = WienerMask2;
                break;
            }
        }
Пример #9
0
        private void medianButton_Click(object sender, EventArgs e)
        {
            var inputBitmap            = new Bitmap(otherFiltersInputImgBox.Image);
            var medianFilterMaskClient = new MedianFilter(inputBitmap,
                                                          Settings.Default.StoreAsColorWherePossible);

            otherFiltersOutputImgBox.Image = medianFilterMaskClient.Filter();
        }
Пример #10
0
        public void MedianFilter_Defaultvalues_GivesCorrectKernel()
        {   /// Test whether Medianfilter class throws correct exceptions
            // Filter
            MedianFilter medianDef = new MedianFilter();

            Assert.Equal(5, medianDef.kernel);
            Assert.Equal(2, medianDef.distance);
        }
Пример #11
0
        // NET HIKIPURO medexiann
        private void button9_Click(object sender, EventArgs e)
        {
            Bitmap bitmap = new Bitmap(pictureBox1.Image);

            bitmap = MedianFilter.Apply(bitmap);
            pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
            pictureBox2.Image    = bitmap;
        }
        public void TestMedianFilter32()
        {
            BMPImage image = new BMPImage("../../../TestFiles/input32.bmp");

            MedianFilter.Median(image);
            image.WriteToFile("../../../TestFiles/output.bmp");
            FileAssert.AreEqual("../../../TestFiles/output.bmp", "../../../TestFiles/Median32.bmp");
            Assert.Pass();
        }
Пример #13
0
        private void medianToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image != null)
            {
                cashBack.Push(image);
            }
            Filters filter = new MedianFilter();

            backgroundWorker1.RunWorkerAsync(filter);
        }
Пример #14
0
        private void МедианныйФильтрToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var bm = new Bitmap(pictureBox1.Image);

            old_image = image;
            image     = bm;
            Filters filter1 = new MedianFilter();

            backgroundWorker1.RunWorkerAsync(filter1);
        }
Пример #15
0
        public void TestMedianFiltering()
        {
            var filter = new MedianFilter(5);

            var input    = new[] { 2, 6, 5, 4, 0, 3, 5, 7, 9, 2, 0, 1f };
            var expected = new[] { 2, 4, 4, 4, 4, 4, 5, 5, 5, 2, 1, 0f };

            var filtered = filter.ApplyTo(new DiscreteSignal(1, input));

            Assert.That(filtered.Samples, Is.EqualTo(expected).Within(1e-10));
        }
Пример #16
0
        public void TestMedianFilteringDefault()
        {
            var filter = new MedianFilter();    // 9-point median filter

            var input    = new[] { 1, 6, 5, 2, 8, 1, 9, 5, 4, 2, 3, 4, 6, 7, 4f };
            var expected = new[] { 1, 1, 2, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3f };

            var filtered = filter.ApplyTo(new DiscreteSignal(1, input));

            Assert.That(filtered.Samples, Is.EqualTo(expected).Within(1e-10));
        }
        public static bool ApplyFilter(BitMapReading input, string filterName, string output)
        {
            uint width    = input.Width;
            uint height   = input.Height;
            int  channels = input.BitsPerPixel / 8;

            byte[][] image = input.Image;
            byte[][] filteredImage;

            switch (filterName)
            {
            case "GRAY":
                filteredImage = GrayFilter.ApplyFilter(width, height, channels, image);
                break;

            case "MEDIAN":
                filteredImage = MedianFilter.ApplyFilter(width, height, channels, image);
                break;

            case "GAUSS":
                filteredImage = ConvolutionFilters.GaussFilter(width, height, channels, image);
                break;

            case "SOBELX":
                filteredImage = ConvolutionFilters.SobelXFilter(width, height, channels, image);
                break;

            case "SOBELY":
                filteredImage = ConvolutionFilters.SobelYFilter(width, height, channels, image);
                break;

            case "SOBEL":
            case "SOBELXY":
                filteredImage = ConvolutionFilters.SobelFilter(width, height, channels, image);
                break;

            default:
                return(false);
            }

            try
            {
                new BitMapWriting(output, input.Header, filteredImage);
            }
            catch (Exception)
            {
                Console.WriteLine("Could not open\\create output file");
                Environment.Exit(3);
            }

            Console.WriteLine($"{filterName} filter was applied successfully");
            return(true);
        }
Пример #18
0
        private void btnProcessImage_Click(object sender, EventArgs e)
        {
            _algoryths["Собеля"]          = new Sobel(_parameterSettingForm.SobelLimit);
            _algoryths["Гаусса"]          = new Gauss(_parameterSettingForm.Sigma);
            _algoryths["Медианный"]       = new MedianFilter(_parameterSettingForm.WindowSize);
            _algoryths["Скользящее окно"] = new SlidingWindow(_parameterSettingForm.WindowSize);
            if (_imageIsLoaded)
            {
                pictureBoxResult.Image = _algoryths[cmbBox.Text].Process(new Bitmap(pictureBoxResult.Image));
                return;
            }

            MessageBox.Show("Load image first!");
        }
Пример #19
0
        public async void MedianFilterButton()
        {
            var metroWindow = Application.Current.MainWindow as MetroWindow;
            var controller  = await metroWindow.ShowProgressAsync("Proszę czekać...", "Trwa przetwarzanie obrazu");

            controller.SetCancelable(false);
            controller.SetIndeterminate();

            var medianFilter = new MedianFilter();
            var newBitmap    = medianFilter.ExecuteFilter(this.ConvertFromBitmapImageToBitmap(this.DisplayedImage));

            this.DisplayedImage = this.ConvertFromBitmapToBitmapImage(newBitmap);

            await controller.CloseAsync();
        }
Пример #20
0
        /// <summary>
        /// Set value
        /// </summary>
        private void SetValue()
        {
            var w        = Colors.GetLength(0);
            var h        = Colors.GetLength(1);
            var tempData = new byte[w + 2, h + 2, 1];

            Data  = new byte[w, h, 1];
            Image = new bool[w, h];
            for (int i = 0; i < w; i++)
            {
                for (int j = 0; j < h; j++)
                {
                    var argb = Colors[i, j].ToArgb();
                    if (argb == Constant.ArgbWhite || argb == Constant.ArgbTunnel || argb == Constant.ArgbYellow)
                    {
                        tempData[i + 1, j + 1, 0] = 255;
                    }
                    else
                    {
                        tempData[i + 1, j + 1, 0] = 0;
                    }
                }
            }
            MedianFilter.Filter(tempData);
            for (int i = 0; i < 5; i++)
            {
                ZhangSuen.ZhangSuenThinning(tempData);
            }
            MedianFilter.CorrosiveHit(tempData);
            for (int i = 0; i < w; i++)
            {
                for (int j = 0; j < h; j++)
                {
                    Data[i, j, 0] = tempData[i + 1, j + 1, 0];
                    Image[i, j]   = Data[i, j, 0] == 255 ? true : false;
                    if (Image[i, j])
                    {
                        Colors[i, j] = Color.Black;
                    }
                    else
                    {
                        Colors[i, j] = Color.White;
                    }
                }
            }
        }
Пример #21
0
        public void MedianFilter_LargeOrOddkernel_ThrowsCorrectException()
        {   /// Test whether Medianfilter class throws correct exceptions
            testImg.New("Quarters", new int[] { 6, 6 });

            // Filter
            MedianFilter medianLarge = new MedianFilter(15);
            MedianFilter medianEven  = new MedianFilter(4);

            Exception ex = Assert.Throws <Exception>(
                delegate { medianLarge.Filtering(testImg.Image.ToDouble()); });

            Assert.Equal("Kernel radius is larger than input array!", ex.Message);
            Exception ex2 = Assert.Throws <Exception>(
                delegate { medianEven.Filtering(testImg.Image.ToDouble()); });

            Assert.Equal("Kernel width is not odd!", ex2.Message);
        }
Пример #22
0
        public void TestMedianFilteringDefault()
        {
            var filter1 = new MedianFilter();    // 9-point median filter (faster implementation for sizes > 10)
            var filter2 = new MedianFilter2();   // 9-point median filter

            var input    = new[] { 1, 6, 5, 2, 8, 1, 9, 5, 4, 2, 3, 4, 6, 7, 4f };
            var expected = new[] { 1, 1, 2, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3f };

            var filtered1 = filter1.ApplyTo(new DiscreteSignal(1, input));
            var filtered2 = filter2.ApplyTo(new DiscreteSignal(1, input));

            Assert.Multiple(() =>
            {
                Assert.That(filtered1.Samples, Is.EqualTo(expected).Within(1e-10));
                Assert.That(filtered2.Samples, Is.EqualTo(expected).Within(1e-10));
            });
        }
Пример #23
0
        static private int[] PPGremoveOutofRange(float[] signalData, List <int> Idx)
        {
            List <int> inlier = new List <int>();

            NWaves.Filters.MedianFilter mFilter = new MedianFilter();
            DiscreteSignal medianSig            = mFilter.ApplyTo(new DiscreteSignal(1, signalData));

            int i = 0;

            for (i = 0; i < Idx.Count(); i++)
            {
                if (signalData[Idx[i]] < (medianSig[Idx[i]] + SampleStandardDeviation(signalData, signalData[Idx[i]])))
                {
                    inlier.Add(Idx[i]);
                }
            }

            return(inlier.ToArray());
        }
Пример #24
0
 static void Main(string[] args)
 {
     try
     {
         if (args.Length < 2) throw new Exception("Недостаточно аргументов!");
         MedianFilter M = new MedianFilter(windowSize);
         M.Load(args[0]);
         List<Point> intervals = Helper.getIntervals(ThreadCount, byteOnPixel, M.length, MedianFilter.bmp_info);
         M.PFilter(intervals);
         M.Save(args[1]);
     }
     catch (Exception ex)
     {
         Console.WriteLine("************APP EXCEPTION**********");
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.Source);
         Console.WriteLine(ex.StackTrace);
     }
 }
Пример #25
0
    public FilterGenerator(int quadrantSize, LocalTerrain localTerrain)
    {
        globalFilterMountainC = new GlobalCoordinates(100);
        globalFilterAverageC = new GlobalCoordinates(100);
        globalFilterMedianC = new GlobalCoordinates(100);
        globalFilterSpikeC = new GlobalCoordinates(100);
        globalFilterGaussianC = new GlobalCoordinates(100);
        globalFilterMinThresholdC = new GlobalCoordinates(100);
        globalFilterMaxThresholdC = new GlobalCoordinates(100);

        lt = localTerrain;
        localCoordinates = lt.localTerrainC;

        mf = new MountainFilter(this);
        af = new AverageFilter(this);
        mdf = new MedianFilter(this);
        sf = new SpikeFilter(this);
        gf = new GaussianFilter(this);
        tf = new ThresholdFilter(this);
    }
Пример #26
0
        public void MedianFilter_SmallQuarter_EqualsPythonArray()
        {   /// Test whether Medianfilter class equals to scipy.signal.medfilt (default)
            testImg.New("Quarters", new int[] { 6, 6 });

            // Filter
            MedianFilter mc = new MedianFilter(3);

            double[,] imageFiltered = mc.Filtering(testImg.Image.ToDouble());
            //Console.WriteLine("Median filtered:"); Functions.DisplayArray(imageFiltered);

            double[,] refArray = new double[6, 6] // Here, actually columns are written out
            {
                { 0, 1, 1, 1, 3, 0 },
                { 1, 1, 1, 3, 3, 3 },
                { 1, 1, 2, 3, 3, 3 },
                { 1, 2, 2, 3, 4, 3 },
                { 2, 2, 2, 4, 4, 4 },
                { 0, 2, 2, 2, 4, 0 }
            };
            //Console.WriteLine("Reference:"); Functions.DisplayArray(refArray);
            Assert.Equal(refArray, imageFiltered);
        }
        public static void Run()
        {
            // ExStart:ApplyingCorrectionFilters
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_OMR();
            // Initialize an instance of OcrEngine
            OcrEngine ocrEngine = new OcrEngine();

            // Set Image property by loading an image from file path
            ocrEngine.Image = ImageStream.FromFile(dataDir+ "Sampleocr.bmp");

            // Create CorrectionFilters collection
            CorrectionFilters filters = new CorrectionFilters();
            Filter filter = null;

            // Initialize Median filter
            filter = new MedianFilter(5);
            filters.Add(filter);

            // Create Gaussian Blur filter
            filter = new GaussBlurFilter();
            filters.Add(filter);

            // Create Noise Removal filter
            filter = new RemoveNoiseFilter();
            filters.Add(filter);

            // Assign collection to OcrEngine
            ocrEngine.Config.CorrectionFilters = filters;

            // Run recognition process
            if (ocrEngine.Process())
            {
                // Display results
                Console.WriteLine(ocrEngine.Text);
            }
            // ExEnd:ApplyingCorrectionFilters
        }
Пример #28
0
        public static void Main()
        {
            // The path to the documents directory.
            string dataDir = Aspose.OCR.Examples.Utils.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            //Initialize an instance of OcrEngine
            OcrEngine ocrEngine = new OcrEngine();

            //Set Image property by loading an image from file path
            ocrEngine.Image = ImageStream.FromFile(dataDir + "Sampleocr.bmp");

            //Create CorrectionFilters collection
            CorrectionFilters filters = new CorrectionFilters();
            Filter            filter  = null;

            //Initialize Median filter
            filter = new MedianFilter(5);
            filters.Add(filter);

            //Create Gaussian Blur filter
            filter = new GaussBlurFilter();
            filters.Add(filter);

            //Create Noise Removal filter
            filter = new RemoveNoiseFilter();
            filters.Add(filter);

            //Assign collection to OcrEngine
            ocrEngine.Config.CorrectionFilters = filters;

            //Run recognition process
            if (ocrEngine.Process())
            {
                //Display results
                Console.WriteLine(ocrEngine.Text);
            }
        }
        public static void Main()
        {
            // The path to the documents directory.
            string dataDir = Aspose.OCR.Examples.Utils.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            //Initialize an instance of OcrEngine
            OcrEngine ocrEngine = new OcrEngine();

            //Set Image property by loading an image from file path
            ocrEngine.Image = ImageStream.FromFile(dataDir+ "Sampleocr.bmp");

            //Create CorrectionFilters collection
            CorrectionFilters filters = new CorrectionFilters();
            Filter filter = null;

            //Initialize Median filter
            filter = new MedianFilter(5);
            filters.Add(filter);

            //Create Gaussian Blur filter
            filter = new GaussBlurFilter();
            filters.Add(filter);

            //Create Noise Removal filter
            filter = new RemoveNoiseFilter();
            filters.Add(filter);

            //Assign collection to OcrEngine
            ocrEngine.Config.CorrectionFilters = filters;

            //Run recognition process
            if (ocrEngine.Process())
            {
                //Display results
                Console.WriteLine(ocrEngine.Text);
            }
        }
Пример #30
0
        public async Task InitAsync()
        {
            var i2cDeviceSelector = I2cDevice.GetDeviceSelector();
            var devices           = await DeviceInformation.FindAllAsync(i2cDeviceSelector);

            var hmc5983ConnectionSettings = new I2cConnectionSettings(HMC5983_ADDRESS);

            _compassSensor = await I2cDevice.FromIdAsync(devices[0].Id, hmc5983ConnectionSettings);

            //Config Register A
            // 7 - 7 = 0 Temperature Off
            // 6 - 5 = 11 => 8 Samples per reading
            // 4 - 2 = 100 => Data Rate 15 Hz
            // 1 - 0 = 00 Measurement Config Bits (default)

            //Config Register B
            //Gain - Use Default

            /*
             * var setupBuffer = new byte[2];
             * setupBuffer[0] = HMC5983_CONF_A;
             * setupBuffer[1] = 0b01110000;
             * _compassSensor.Write(setupBuffer);*/

            _medianFilter = new MedianFilter();

            RawX = new Sensor()
            {
                IsOnline = false
            };
            RawY = new Sensor()
            {
                IsOnline = false
            };
            IsOnline = false;
        }
Пример #31
0
        private static async Task TestBrainDeviceManager()
        {
            var cfg       = ClientConfig.GetConfig();
            var lowFilter = new LowPassFilter()
            {
                LowPassRate = 10
            };
            var highFilter = new HighPassFilter()
            {
                HighPassRate = 10000
            };
            var bPassFilter = new BandPassFilter()
            {
                LowCutoffRate = 20, HighCutoffRate = 30
            };
            var bStopFilter = new BandStopFilter()
            {
                LowPassRate = 35, HighPassRate = 38
            };
            var mFilter = new MedianFilter()
            {
                HalfMedianWindowSize = 7
            };
            var bandFilter = new BandPassStopFilter
            {
                BandFilterList = new List <BandFilter> {
                    lowFilter, highFilter, bPassFilter, bStopFilter
                }
            };

            bandFilter.Disable = true;
            var allFilter = new FilterTypeList()
            {
                Filters = new List <FilterType> {
                    bandFilter, mFilter
                }
            };
            var filterParameters = new Dictionary <string, string>
            {
                { FilterTypeList.FIRhalfOrderOptionName, 10.ToString() }
            };

            cfg.FilterLst = allFilter;
            IOnlineFilter         filter     = null;
            WaveletReconstruction waveletRec = null;

            cfg.WaveletRecCfg = new WaveletReconstructionConfig
            {
                AvgLevel          = 8,
                ConvolutionMode   = ConvolutionModeEnum.Normal,
                ExtensionMode     = SignalExtension.ExtensionMode.SymmetricHalfPoint,
                Level             = 8,
                MotherWaveletName = "db5",
                WindowSize        = 15
            };
            cfg.WriteToFile(ClientConfig.DefaultConfigFileName);


            BrainDeviceManager.Init();
            var sender = await BrainDeviceManager.Connnect("127.0.0.1", 9211);

            BrainDevState currentState = default(BrainDevState);

            //保证设备参数正常才继续跑逻辑
            BrainDeviceManager.BrainDeviceState.Subscribe(ss =>
            {
                currentState = ss;
                filterParameters.Update(
                    FilterTypeList.SampleRateOptionName,
                    BrainDevState.SampleCountPer1Sec(ss.SampleRate).ToString()
                    );
                //AppLogger.Debug($"Brain Device State Changed Detected: {ss}");
            }, () =>
            {
                AppLogger.Debug("device stop detected");
            });
            int totalReceived    = 0;
            var medianFilter     = OnlineFirFilter.CreateDenoise(7);
            var fastMedianFilter = new OnlineFastMedianFilter(3);

            BrainDeviceManager.SampleDataStream.Subscribe(tuple =>
            {
                var(order, datas, arr) = tuple;
                //Console.Write($" {order} ");
                var passTimes = BrainDevState.PassTimeMs(currentState.SampleRate, totalReceived) / 1000;
                var intArr    = datas.CopyToArray();
                var val       = intArr[0];
                var voltage   = BitDataConverter.Calculatevoltage(val, 4.5f, currentState.Gain);
                totalReceived++;
                var m1 = medianFilter.ProcessSample(voltage);
                var m2 = fastMedianFilter.ProcessSample(voltage);
                AppLogger.Debug($"passTimes:{passTimes},val:{val},voltage:{voltage},median filter:{m1},fast:{m2},{m1==m2}");
                if (filter == null)
                {
                    filter     = allFilter.CreateFilter(filterParameters);
                    waveletRec = cfg.WaveletRecCfg.Create(
                        BrainDevState.SampleCountPer1Sec(currentState.SampleRate));
                    waveletRec.ReconstructionStream.Subscribe(reconstruct =>
                    {
                        var(vol, tim) = reconstruct;
                        AppLogger.Debug($"wavelet reconstruction:{vol} at {tim}");
                    });
                }
                waveletRec?.BufferData((voltage, passTimes));
                AppLogger.Debug($"filter processed:{filter.ProcessSample(voltage)}");
                //AppLogger.Debug($"order:{order}");
                //AppLogger.Debug($"converted values:{datas.Show()}");
                //AppLogger.Debug($"original datas:{arr.Show()}");
            }, () =>
            {
                AppLogger.Debug("device sampling stream closed detected");
            });

            var cmdResult = await sender.QueryParam();

            AppLogger.Debug("QueryParam result:" + cmdResult);
            if (cmdResult != CommandError.Success)
            {
                AppLogger.Error("Failed to QueryParam, stop");
                BrainDeviceManager.DisConnect();
                return;
            }


            cmdResult = await sender.SetFilter(true);

            AppLogger.Debug("SetFilter result:" + cmdResult);

            cmdResult = await sender.SetTrap(TrapSettingEnum.Trap_50);

            AppLogger.Debug("SetTrap result:" + cmdResult);

            cmdResult = await sender.SetSampleRate(SampleRateEnum.SPS_2k);

            AppLogger.Debug("SetSampleRate result:" + cmdResult);

            cmdResult = await sender.QueryParam();

            AppLogger.Debug("QueryParam result:" + cmdResult);

            cmdResult = await sender.QueryFaultState();

            AppLogger.Debug("QueryFaultState result:" + cmdResult);

            cmdResult = await sender.TestSingleImpedance(1);

            AppLogger.Debug("TestSingleImpedance result:" + cmdResult);

            cmdResult = await sender.TestMultiImpedance(30);

            AppLogger.Debug("TestMultiImpedance result:" + cmdResult);

            Console.ReadLine();
            var fs = new FileResource(currentState, 19801983, 1, BrainDeviceManager.BufMgr);

            fs.StartRecord(BrainDeviceManager.SampleDataStream);
            cmdResult = await sender.Start();

            if (cmdResult != CommandError.Success)
            {
                AppLogger.Error("Failed to start sampler");
            }
            else
            {
                AppLogger.Debug($"start receive sample data");
                await Task.Delay(1000 *10);

                AppLogger.Debug($"stoping");
                await sender.Stop();

                AppLogger.Debug($"stop receive sample data");
                await Task.Delay(1000);
            }

            BrainDeviceManager.DisConnect();
            fs.Dispose();

            var readf = new FileSampleData(fs.ResourceId, BrainDeviceManager.BufMgr);

            Console.WriteLine($"expecte to read {totalReceived} blocks");
            Console.WriteLine($"start reading saved sampling data");
            int readCount = 0;

            readf.DataStream.Subscribe(tuple =>
            {
                var(order, datas, arr) = tuple;
                Console.Write($" {order} ");
                readCount++;
                //AppLogger.Debug($"order:{order}");
                //AppLogger.Debug($"converted values:{datas.Show()}");
                //AppLogger.Debug($"original datas:{arr.Show()}");
            }, () =>
            {
                AppLogger.Debug($"read sampling data file end,count :{readCount},expected count:{totalReceived}");
            });
            readf.Start();
            await Task.Delay(1000 *10);

            Console.Write($"wait complete");
        }
Пример #32
0
        static private List <int> PPGfiltering(int[] ppgData)
        {
            float lowcut  = (float)ppg_min_bpm / 60.0f / ppg_frame_rate / 2.0f;
            float highcut = (float)ppg_max_bpm / 60.0f / ppg_frame_rate / 2.0f;

            var LPfilter = new NWaves.Filters.OnePole.LowPassFilter(highcut);
            var HPfilter = new NWaves.Filters.OnePole.HighPassFilter(lowcut);

            var filteredPPG = LPfilter.ApplyTo(new DiscreteSignal(1, ppgData));

            filteredPPG = HPfilter.ApplyTo(filteredPPG);

            /******************** Median Filtering ********************/
            NWaves.Filters.MedianFilter mFilter = new MedianFilter(167);
            DiscreteSignal mfilteredPPG         = mFilter.ApplyTo(filteredPPG);

            float[] arrayPPG = SigToArr(mfilteredPPG);

            var peakIdx = PPGfindPeaks(arrayPPG);

            var inlier = PPGremoveOutofRange(arrayPPG, peakIdx);

            List <float> bpm = new List <float>();

            for (int i = 0; i < inlier.Count() - 1; i++)
            {
                float curBPM = ((float)ppg_frame_rate / ((float)inlier[i + 1] - (float)inlier[i])) * 60.0f;

                if (curBPM > ppg_max_bpm)
                {
                    bpm.Add(0);
                }
                else if (curBPM < ppg_min_bpm)
                {
                    bpm.Add(0);
                }
                else
                {
                    bpm.Add(curBPM);
                }
            }

            List <float> output = new List <float>();

            /*output.Add(90);
             * for (int i = 1; i < bpm.Count() - 1; i++)
             * {
             *  if (bpm[i] == 0)
             *      output.Add(output[output.Count() - 1]);
             *  else if (30 < (bpm[i] - bpm[i - 1]))
             *      output.Add(output[output.Count() - 1]);
             *  else
             *      output.Add(bpm[i]);
             * }*/
            for (int i = 0; i < bpm.Count() - 1; i++)
            {
                if (bpm[i] != 0)
                {
                    output.Add(bpm[i]);
                }
            }
            if (output.Count() == 0)
            {
                output.Add(90);
            }

            //var outputG = GaussianFiltering(7, output.ToArray());

            List <int> toList = new List <int>();

            for (int i = 0; i < output.Count(); i++)
            {
                toList.Add((int)output[i]);
            }

            return(toList);
        }
Пример #33
0
        static public List <GsrPpgPacket> GSRfiltering(List <GsrPpgPacket> GSRdata)
        {
            var gsrData_int = GSRdata.Select(e => gsr_max - e.Value).ToArray();
            var gsrData     = Array.ConvertAll(gsrData_int, item => (float)item);

            /******************** Gaussian Filtering ********************/
            var filtered = GaussianFiltering(gsr_gaussian_kernel, gsrData);

            /******************** Median Filtering ********************/
            MedianFilter   mFilter   = new MedianFilter(gsr_subtract_sample);
            DiscreteSignal tonic_GSR = mFilter.ApplyTo(filtered);

            var phasic_GSR = filtered.Subtract(tonic_GSR);

            /******************* 앞/뒤 데이터 자르는 과정인듯 ********************/
            if (phasic_GSR.Length > gsr_subtract_sample * 2)
            {
                for (int i = 0; i < gsr_subtract_sample; i++)
                {
                    phasic_GSR[i] = 0;
                }
                for (int i = phasic_GSR.Length - 1; i > phasic_GSR.Length - gsr_subtract_sample; i--)
                {
                    phasic_GSR[i] = 0;
                }
            }
            else
            {
                for (int i = 0; i < phasic_GSR.Length; i++)
                {
                    phasic_GSR[i] = 0;
                }
            }

            /******************** Find peak ********************/
            bool  checkFlag = false;
            float max       = 0;

            int idx1 = 0;

            var findPeak = GSRdata.Select(e => new GsrPpgPacket(0, e.Timestamp)).ToList();

            findPeak[0].Value = 0;

            for (int i = 1; i < filtered.Length; i++)
            {
                if (checkFlag)
                {
                    if (phasic_GSR[i] > 0 && phasic_GSR[i - 1] <= 0)
                    {
                        for (int j = idx1; j < i; j++)
                        {
                            findPeak[j].Value = (int)max;
                        }
                        checkFlag = false;
                    }
                    if (phasic_GSR[i] > max)
                    {
                        max = phasic_GSR[i];
                    }
                }
                else
                {
                    if (phasic_GSR[i] > 0 && phasic_GSR[i - 1] > 0)
                    {
                        idx1      = i;
                        max       = 0;
                        checkFlag = true;
                    }
                }
            }

            /******************** Gaussian Filtering ********************/

            //var filteredData = GaussianFiltering(gsr_gaussian_kernel * 10, findPeak.ToArray());
            return(findPeak);
        }
Пример #34
0
        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap img = new Bitmap(picBarcode.Image);

            picBarcode.Image = MedianFilter.Filter(img, 3, 0, false);
        }
        static void Main(string[] args)
        {
            PrintDescription();

            if (args.Length != 3)
            {
                Console.WriteLine(
                    "Неверное количество аргументов. Формат: <программа> <имя_входного_файла> <название_фильтра> <имя выходного файла>");
                return;
            }

            string currentFilter = args[1];

            if (!currentFilter.Equals("median") && !currentFilter.Equals("gauss") && !currentFilter.Equals("sobelx") &&
                !currentFilter.Equals("sobely") && !currentFilter.Equals("gray"))
            {
                Console.WriteLine("Введённый фильтр не относится к списку доступных. Попробуйте ещё раз.");
                return;
            }

            FileStream fileIn;

            try
            {
                fileIn = new FileStream(args[0], FileMode.Open, FileAccess.ReadWrite);
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Ошибка! Входной файл не был найден! Попробуйте ещё раз.");
                return;
            }

            FileStream fileOut;

            try
            {
                fileOut = new FileStream(args[2], FileMode.Create, FileAccess.ReadWrite);
            }
            catch (Exception)
            {
                fileIn.Close();
                Console.WriteLine("Ошибка! Не удалось создать/открыть выходной файл. Попробуйте ещё раз.");
                return;
            }

            BitMapFile file = new(fileIn);

            fileIn.Close();

            if (currentFilter.Equals("gray"))
            {
                Console.WriteLine("Выбран фильтр серого");
                GrayFilter.ApplyFilter(file);
            }
            else if (currentFilter.Equals("median"))
            {
                Console.WriteLine("Выбран усредняющий фильтр");
                MedianFilter.ApplyFilter(file);
            }
            else if (currentFilter.Equals("gauss"))
            {
                Console.WriteLine("Выбран фильтр Гаусса");
                GaussFilter.ApplyFilter(file);
            }
            else if (currentFilter.Equals("sobelx"))
            {
                Console.WriteLine("Выбран фильтр Собеля по X");
                SobelFilter.ApplyFilter(file, SobelFilter.Type.X);
            }
            else if (currentFilter.Equals("sobely"))
            {
                Console.WriteLine("Выбран фильтр Собеля по Y");
                SobelFilter.ApplyFilter(file, SobelFilter.Type.Y);
            }

            Console.WriteLine("Фильтр был успешно применён");

            file.WriteResult(fileOut);
            fileOut.Close();
        }