public ClusterAlgorithm(Set set, Proximity diss)
 {
     if (set == null || diss == null)
         throw new ArgumentNullException("Parametro Incorrecto en el constructor de la clase ClusterAlgorithm");
     this.Set = set;
     this.Proximity = diss;
 }
Exemplo n.º 2
0
 public ClusterAlgorithm(Set set, Proximity diss)
 {
     if (set == null || diss == null)
     {
         throw new ArgumentNullException("Parametro Incorrecto en el constructor de la clase ClusterAlgorithm");
     }
     this.Set       = set;
     this.Proximity = diss;
 }
        //OJO Excepciones porque dice que no puede acceder al fichero porque esta siendo usado por otro proceso
        //tbn da Excepcion porque dice que no existe el fichero.
        //Parece que el metis se demora un poco creandolo, debe ser algo de eso, y lo crea pero despues parece que empieza
        //a escribir sobre el y entonces es que me da la otra excepcion de que esta siendo usado por otra persona, es que todo
        //ocurre muy rapido, NUNCA ME HA DADO EXCEPCION EN EL MODO DEBUG
        public static Structuring BuildStructuringFromOutputFile(string inputfilename, Set Set, int ClustersCount, Proximity Proximity)
        {
            try
            {
                string folderpath = Utils.ExesFolderPath;
                string filename   = inputfilename + ".part." + ClustersCount;
                string filepath   = folderpath + Path.DirectorySeparatorChar + filename;

                //Dar tiempo a que el algoritmo Metis cree el fichero
                while (!File.Exists(filepath))
                {
                }

                FileStream fs = null;
                bool       ok = false;
                //Dar tiempo a que el algoritmo Metis termine de escribir sobre el fichero de salida
                while (!ok)
                {
                    try
                    {
                        fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
                        ok = true;
                    }
                    catch
                    { }
                }

                StreamReader sr = new StreamReader(fs);
                Dictionary <string, Cluster> dic_clusters;
                try
                {
                    //Crear Dictionary<string,Cluster> para poder construir la particion
                    dic_clusters = new Dictionary <string, Cluster>();
                    string line;
                    int    vertex = 0;
                    while ((line = sr.ReadLine()) != null)
                    {
                        int    cluster       = int.Parse(line);
                        string nameOfCluster = "C-" + cluster;
                        if (dic_clusters.ContainsKey(nameOfCluster))
                        {
                            dic_clusters[nameOfCluster].AddElement(Set[vertex]);
                        }
                        else
                        {
                            Cluster c = new Cluster(nameOfCluster);
                            c.AddElement(Set[vertex]);
                            dic_clusters.Add(nameOfCluster, c);
                        }
                        vertex++;
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Formato incorrecto del fichero de salida del algoritmo METIS \r\nInformacion Adicional: " + ex.Message);
                }
                finally
                {
                    sr.Close();
                    fs.Close();

                    //Eliminar el fichero de entrada
                    File.Delete(ExesFolderPath + Path.DirectorySeparatorChar + inputfilename);

                    //Eliminar el fichero de salida
                    File.Delete(filepath);
                }

                //Los numeros de las particiones comienzan con cero hasta el numero de particiones menos uno[0,...,P-1]
                return(new Partition()
                {
                    Clusters = dic_clusters, Proximity = Proximity
                });
            }
            catch
            {
                return(null);
            }
        }
 public SPSegmentor(Set set, Proximity diss)
     : base(set, diss)
 {
     Name          = "Super-pixel Segmentor";
     ProximityType = ProximityType.Dissimilarity;
 }
 public AgglomerativeWithLifetime(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Agglomerative with Lifetime";
 }
 public NonHierarchical(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Non Hierarchical";
 }
 public DivisiveWithLifetime(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Divisive with Lifetime";
 }
 public Divisive(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Divisive";
 }
 public Agglomerative(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Agglomerative";
 }
        //OJO Excepciones porque dice que no puede acceder al fichero porque esta siendo usado por otro proceso
        //tbn da Excepcion porque dice que no existe el fichero.
        //Parece que el metis se demora un poco creandolo, debe ser algo de eso, y lo crea pero despues parece que empieza
        //a escribir sobre el y entonces es que me da la otra excepcion de que esta siendo usado por otra persona, es que todo
        //ocurre muy rapido, NUNCA ME HA DADO EXCEPCION EN EL MODO DEBUG
        public static Structuring BuildStructuringFromOutputFile(string inputfilename, Set Set, int ClustersCount, Proximity Proximity)
        {
            try
            {
                string folderpath = Utils.ExesFolderPath;
                string filename = inputfilename + ".part." + ClustersCount;
                string filepath = folderpath + Path.DirectorySeparatorChar + filename;

                //Dar tiempo a que el algoritmo Metis cree el fichero
                while (!File.Exists(filepath))
                {
                }

                FileStream fs = null;
                bool ok = false;
                //Dar tiempo a que el algoritmo Metis termine de escribir sobre el fichero de salida
                while (!ok)
                {
                    try
                    {
                        fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
                        ok = true;
                    }
                    catch
                    { }
                }

                StreamReader sr = new StreamReader(fs);
                Dictionary<string, Cluster> dic_clusters;
                try
                {
                    //Crear Dictionary<string,Cluster> para poder construir la particion
                    dic_clusters = new Dictionary<string, Cluster>();
                    string line;
                    int vertex = 0;
                    while ((line = sr.ReadLine()) != null)
                    {
                        int cluster = int.Parse(line);
                        string nameOfCluster = "C-" + cluster;
                        if (dic_clusters.ContainsKey(nameOfCluster))
                        {
                            dic_clusters[nameOfCluster].AddElement(Set[vertex]);
                        }
                        else
                        {
                            Cluster c = new Cluster(nameOfCluster);
                            c.AddElement(Set[vertex]);
                            dic_clusters.Add(nameOfCluster, c);
                        }
                        vertex++;
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Formato incorrecto del fichero de salida del algoritmo METIS \r\nInformacion Adicional: " + ex.Message);
                }
                finally
                {
                    sr.Close();
                    fs.Close();

                    //Eliminar el fichero de entrada
                    File.Delete(ExesFolderPath + Path.DirectorySeparatorChar + inputfilename);

                    //Eliminar el fichero de salida
                    File.Delete(filepath);
                }

                //Los numeros de las particiones comienzan con cero hasta el numero de particiones menos uno[0,...,P-1]
                return new Partition() { Clusters = dic_clusters, Proximity = Proximity };
            }
            catch
            {
                return null;
            }
        }
 public SPSegmentorKFIJO(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Super-pixel Segmentor";
     ProximityType = ProximityType.Dissimilarity;
 }
Exemplo n.º 12
0
 public Agglomerative(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Agglomerative";
 }
Exemplo n.º 13
0
 public Hierarchical(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Hierarchical";
 }
Exemplo n.º 14
0
 public DivisiveWithLifetime(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Divisive with Lifetime";
 }
Exemplo n.º 15
0
 public Divisive(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Divisive";
 }
Exemplo n.º 16
0
 public AgglomerativeWithLifetime(Set set, Proximity diss)
     : base(set, diss)
 {
     Name = "Agglomerative with Lifetime";
 }