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