예제 #1
0
        public clustercs(minuim__spaining tree, int cluster, int size)
        {
            cluster_number = cluster;
            mst_tree       = tree;
            removed_node   = new int [2 * cluster_number];
            clust_arr      = new Tuple <int, int, int> [cluster_number];
            visted         = new int[size];
            vertices       = size;

            for (int i = 0; i < size; i++)
            {
                if (i < cluster_number)
                {
                    clust_arr[i] = new Tuple <int, int, int>(0, 0, 0);
                }
                visted[i] = -1;
            }
        }
예제 #2
0
        private void btnGaussSmooth_Click(object sender, EventArgs e)
        {
            Graph           g         = new Graph();
            int             num_clust = 0;
            List <RGBPixel> Distinct  = new  List <RGBPixel> (width * hight);

            num_clust     = Convert.ToInt32(textBox1.Text);
            Distinct      = g.distinct_arry(ImageMatrix, width, hight);
            textBox3.Text = Distinct.Count.ToString();
            tree          = new minuim__spaining(Distinct, num_clust);
            tree.prim(0);
            textBox2.Text = tree.minumcost.ToString();

            k = new clustercs(tree, num_clust, Distinct.Count);
            k.constrct_clust();
            ImageMatrix = k.Replace(ImageMatrix, width, hight, g.size);
            ImageOperations.DisplayImage(ImageMatrix, pictureBox2);
        }
예제 #3
0
        public int automatic_cluster(minuim__spaining tree)
        {
            double sub = 1;
            double avg;
            int    kluster = 1;

            while (sub >= 0.0001 && kluster <= mst_tree.bonus.Count)
            {
                avg   = tree.bonus.Average();
                segma = 0;
                foreach (double i in tree.bonus)
                {
                    double temp = i - avg;
                    temp   = temp * temp;
                    segma += temp;
                }
                segma = segma / avg;
                segma = Math.Sqrt(segma);
                double val1 = Math.Abs(segma - tree.bonus.Max);
                double val2 = Math.Abs(segma - tree.bonus.Min);
                double max  = tree.bonus.Max;
                double min  = tree.bonus.Min;
                if (val1 > val2)
                {
                    tree.bonus.Remove(max);
                }
                else
                {
                    tree.bonus.Remove(min);
                }

                sub        = Math.Abs(segma - last_segma);
                last_segma = sub;
                kluster++;
            }

            return(kluster);
        }