public void Train(byte[,,] imageData)
        {
            int             trainSamples    = 0;
            FeatureComputer featureComputer = new FeatureComputer(imageData);

            foreach (List <Point> currentTagPoints in this.tagPoints.Values)
            {
                trainSamples += currentTagPoints.Count;
            }

            ////if (trainSamples > 0)
            ////{
            ////   double[][] inputs = new double[trainSamples][];
            ////   int[] outputs = new int[trainSamples];

            ////   this.ClearModels();

            ////   List<string> trueResponses = new List<string>();
            ////   List<DecisionVariable> attributes = new List<DecisionVariable>(FeatureComputer.NumberOfFeatures);

            ////   for (int i = 0; i < FeatureComputer.NumberOfFeatures; i++)
            ////   {
            ////      string columnName = "Feature" + i.ToString(CultureInfo.InvariantCulture);

            ////      attributes.Add(new DecisionVariable(columnName, new Accord.DoubleRange(double.MinValue, double.MaxValue)));
            ////   }

            ////   int trainSampleIndex = 0;

            ////   // Fill the train matrix
            ////   foreach (string label in this.tagPoints.Keys)
            ////   {
            ////      foreach (Point tagPoint in this.tagPoints[label])
            ////      {
            ////         float[] trainingData = featureComputer.ComputeFeatures(tagPoint);

            ////         inputs[trainSampleIndex] = new double[FeatureComputer.NumberOfFeatures];
            ////         Array.Copy(trainingData, inputs[trainSampleIndex], FeatureComputer.NumberOfFeatures);

            ////         trueResponses.Add(label);

            ////         trainSampleIndex++;
            ////      }
            ////   }

            ////   // Train the models
            ////   foreach (string label in this.tagPoints.Keys)
            ////   {
            ////      int responseIndex = 0;

            ////      // Prepare the responses matrix
            ////      foreach (string responseLabel in trueResponses)
            ////      {
            ////         outputs[responseIndex] = (responseLabel == label) ? 1 : 0;

            ////         responseIndex++;
            ////      }

            ////      DecisionTree decisionTree = new DecisionTree(attributes, this.tagPoints.Count);
            ////      C45Learning c45Learning = new C45Learning(decisionTree);

            ////      c45Learning.Learn(inputs, outputs);

            ////      this.Models.Add(label, decisionTree);
            ////   }
            ////}
        }