public static PCTFeature_Lab ReadingFeatureFromFile_Lab(String filePath) { PCTFeature_RGB pctFeature_RGB = ReadingFeatureFromFile_RGB(filePath); if (pctFeature_RGB == null) { return(null); } PCTFeature_Lab pctFeature_Lab = pctFeature_RGB.ToPCTFeature_Lab(); return(pctFeature_Lab); }
private static int CountColorsVW_Lab(PCTFeature_Lab pct, List <Lab> colorVisualWord) { //Dictionary<String, Color> map = new Dictionary<string, Color>(); List <Lab> listColorVWs = new List <Lab>(); foreach (var item in pct.ListColorPoint) { Lab color = colorVisualWord[DistanceHelper.ColorKNN_Lab(item.color, colorVisualWord)]; if (!listColorVWs.Contains(color)) { listColorVWs.Add(color); } //if (!map.ContainsKey(key)) // map.Add(key, color); } //int totalColor = map.Count; //return totalColor; return(listColorVWs.Count); }
public static void RunIndexing_Lab(string imageIndexStoragePath) { #region init List <Lab> visualWordColor = ColorHelper.GenerateColorVisualWord_Lab(); // * Dictionary <string, List <string> > visualWordMain = new Dictionary <string, List <string> >(); List <VisualWordCell_Lab> listKeys = VisualWordHelper.CreateListVWKeys_Lab(); // * foreach (var item in listKeys) { // * string key = item.Color.L + "_" + item.Color.A + "_" + item.Color.B + "_" + item.XIndex + "_" + item.YIndex; visualWordMain.Add(key, new List <String>()); } string indexFileNameExtension = GetIndexFileNameExtension(); #endregion // for each folder int count = 0; string[] SubDirs = Directory.GetDirectories(ConfigCommon.PCT_OUTPUT_PATH); foreach (String folderPath in SubDirs) { Console.WriteLine((++count) + ". " + folderPath); FileInfo[] fileInfos = FileManager.GetInstance().GetAllFileInFolder(folderPath); int sizeFiles = fileInfos.Length; // for each X file (X = PCTConfig.PCT_STEP_INDEX_FILE) for (int i = 0; i < sizeFiles; i += ConfigPCT.PCT_STEP_INDEX_FILE) { // read data PCT from file PCTFeature_Lab dataPCT = PCTReadingFeature.ReadingFeatureFromFile_Lab(fileInfos[i].FullName); // * // if number of color visual-word > Y, skip (Y = PCTConfig.COLOR_NOISE_THRESHOLD) int numberColor = CountColorsVW_Lab(dataPCT, visualWordColor); if (numberColor > ConfigPCT.COLOR_NOISE_THRESHOLD) { continue; } foreach (Dot_Lab colorPoint in dataPCT.ListColorPoint) { // if radius >= Z, index it (Z = PCTConfig.RADIUS_THRESHOLD) if (colorPoint.radius >= ConfigPCT.RADIUS_THRESHOLD) { List <RegionOfFrame> listRegionDotBelongTo = Utils.RegionOfFrameHelper.GetListRegionDotBelongTo(colorPoint.location, colorPoint.radius, dataPCT.Width, dataPCT.Height); Lab color = visualWordColor[DistanceHelper.ColorKNN_Lab(colorPoint.color, visualWordColor)]; foreach (RegionOfFrame region in listRegionDotBelongTo) { //Key_PCTIndexDicLab key = new Key_PCTIndexDicLab(color.L, color.A, color.B, region.X + "_" + region.Y); string key = color.L + "_" + color.A + "_" + color.B + "_" + region.X + "_" + region.Y; visualWordMain[key].Add(dataPCT.FrameName); //if (!visualWordMain[key].Contains(dataPCT.FrameName)) // slow // visualWordMain[key].Add(dataPCT.FrameName); } } } } } foreach (var item in listKeys) { string key = item.Color.L + "_" + item.Color.A + "_" + item.Color.B + "_" + item.XIndex + "_" + item.YIndex; Console.WriteLine("Distincting value of key " + key + " ..."); visualWordMain[key] = visualWordMain[key].Distinct().ToList(); } // save the indexing to a file //String json = JsonConvert.SerializeObject(visualWordMain); //FileManager.GetInstance().WriteFile(json, Path.Combine(imageIndexStoragePath, "index.json")); string fileSavePath = Path.Combine(imageIndexStoragePath, indexFileNameExtension); if (File.Exists(fileSavePath)) { File.Delete(fileSavePath); } //FileManager.GetInstance().WriteDicIndexingToJsonFile(visualWordMain, fileSavePath); FileManager.GetInstance().WriteDicIndexingToFiles(visualWordMain, fileSavePath); }