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); }