Ejemplo n.º 1
0
        public override int Recognize(string filename)
        {
            List <double> x = AlgsWithFiles.bipolImage(filename, baseColor);

            double[] fstSignals = Matrix.getDoubleArr(x);
            double[] sndSignals = fstSignals;

            double eps = 0.001;

            for (int i = 0; i < 10000; ++i)
            {
                double err = 0.0;
                sndSignals = Matrix.MultiplyOnVector(weightMatrix, fstSignals);

                for (int j = 0; j < sndSignals.Length; ++j)
                {
                    sndSignals[j] = TresholdFunc(sndSignals[j]);
                }

                for (int j = 0; j < sndSignals.Length; ++j)
                {
                    err += fstSignals[j] * sndSignals[j];
                }

                err        = fstSignals.Length - err;
                fstSignals = sndSignals;

                if (err < eps)
                {
                    break;
                }
            }

            // find result
            double minDist = double.MaxValue;
            int    index   = 0;

            for (int k = 0; k < samples.Count; ++k)
            {
                double dist = 0.0;
                for (int j = 0; j < sndSignals.Length; ++j)
                {
                    dist += samples[k][j] * sndSignals[j];
                }
                dist = fstSignals.Length - dist;
                if (dist < minDist)
                {
                    minDist = dist;
                    index   = k;
                }
            }

            return(index);
        }