private void SetParameters(string inputPath, ScanningMethod scanningMethod, DescriptorMethod descriptorMethod, MachineLearningMethod machineLearningMethod)
        {
            _symbolParameters = new Utility.SymbolParameters();
            _hessianThreshould = _symbolParameters.HessianThresh;
            _uniquenessThresh = _symbolParameters.UniquenessThress;
            _histogramMatchingScore = _symbolParameters.HistogramMatchingScore;
            _tm = _symbolParameters.TM;

            _log = File.AppendText(inputPath + "/log.txt");

            _machineLearningMethod = machineLearningMethod;
            _scanningMethod = scanningMethod;
            _descriptorType = descriptorMethod;
            //check the FilePath
            _inputPath = inputPath;
            _inPath = inputPath + "/in";
            _outPath = inputPath + "/out";
            _intermediatePath = inputPath + "/Intermediate";

            ValidateFilePath(_inPath, "in");
            ValidateFilePath(_outPath, "out");
            ValidateFilePath(_intermediatePath, "Intermediate");
            ValidateFilePath(_inputPath, "");

            _descriptor = new Descriptor();
            _machineLearning = new MachineLearning();
            _scanImage = new ScanImage();
        }
        public void SymbolRecognitionBySVM(string positivePath, string negativePath, string testPath)
        {
            double[][] inputs, testInputs;
            int[] outputs;
            Image<Bgr, Byte>[] Positives, Negatives;
            Image<Bgr, Byte> test;
            int total = 0;
            int counter = 0;
            _scanImage = new ScanImage();
            _descriptor = new Descriptor();
            _scanImage.SetImages(positivePath, negativePath, testPath, out Positives, out Negatives, out test);
            if (Negatives != null && Negatives.Length != 0)
                total += Negatives.Length;
            if (Positives != null && Positives.Length != 0)
                total += Positives.Length;
            inputs = new double[total][];
            outputs = new Int32[total];

            if (Negatives != null || Negatives.Length != 0)
                for (int i = 0; i < Negatives.Length; i++)
                {
                    inputs[counter] = _descriptor.GetImageVector(Negatives[i], 100);
                    outputs[counter++] = 0;
                }
            if (Positives != null || Positives.Length != 0)
                for (int i = 0; i < Positives.Length; i++)
                {
                    inputs[counter] = _descriptor.GetImageVector(Positives[i], 100);
                    outputs[counter++] = 1;
                }

            _scanImage.ScanByPixel(@"C:\Users\simakmo\Documents\Sima\Symbol Reconition\data\", test, Positives[0], 50, 50);

            string[] filePaths = Directory.GetFiles(@"C:\Users\simakmo\Documents\Sima\Symbol Reconition\data\Intermediate", "*.jpg");
            testInputs = new double[filePaths.Length][];
             counter = 0;
            foreach (string path in filePaths)
                testInputs[counter++] = _descriptor.GetImageVector(new Image<Bgr, Byte>(path), 150);
            _machineLearning = new MachineLearning();

            int dimention = Positives[0].Height * Positives[0].Width;

            int[] testOutputs = _machineLearning.ApplySVMByGussianKernel(2, 2.5, 0.001, 0.2, inputs, outputs, dimention, testInputs);
            List<Point> results = new List<Point>();
            for (int j = 0; j < testOutputs.Length; j++)
            {
                int x, y, num;
                if (testOutputs[j] == 1)
                {
                    GetImageParameters(out x, out y, out num, filePaths[j]);
                    results.Add(new Point(x, y));
                }
            }
            Visualization.DrawResults(results, Positives[0].Size, test, testPath);
        }