Exemplo n.º 1
0
        public void queryThread()
        {
            int shift = 0;

            lock (lockObject)
            {
                shift = shifts++;
            }
            for (int k = shift; k < task.queryNames.Count; k += threadNum)
            {
                SISC query = new SISC();
                query.extract(task.queryPaths[k]);
                for (int i = 0; i < end - start; ++i)
                {
                    Score score = new Score();
                    score.index = start + i;
                    score.score = SISC.dist(query, datasets[i]);
                    scores[k].Add(score);
                }
                ++progress;
                Console.Write("Progress: " + (100.0 * progress / task.queryNames.Count).ToString("0.00") + "%\r");
            }
            lock (lockObject)
            {
                --shifts;
            }
        }
Exemplo n.º 2
0
        public static double dist(SISC a, SISC b)
        {
            double dist = 0.0;

            for (int i = 0; i < a.histogram.Count; ++i)
            {
                double d = 1e100;
                for (int j = 0; j < b.histogram.Count; ++j)
                {
                    double t = 0.0;
                    for (int ang = 0; ang < binAngle; ++ang)
                    {
                        for (int nor = 0; nor < binNorm; ++nor)
                        {
                            double g = a.histogram[i][ang, nor];
                            double h = b.histogram[j][ang, nor];
                            t += (g - h) * (g - h) / (g + h + 0.001);
                        }
                    }
                    d = Math.Min(d, t);
                }
                dist += d;
            }
            return(dist);
        }