public void MathematicialSearchPoint_9Test() //Проверка ядер свертки { //arrange MathematicialSearchPoint core = new MathematicialSearchPoint9(); //act double[,] exepectedGx = new double[, ] { { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 2, 0, 0, 0 }, { 0, 0, 0, 3, 0, 0, 0 }, { 1, 2, 3, -24, 3, 2, 1 }, { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 2, 0, 0, 0 }, { 0, 0, 0, 3, 0, 0, 0 } }; double[,] exepectedGy = new double[, ] { { 1, 0, 0, 0, 0, 0, 1 }, { 0, 2, 0, 0, 0, 2, 0 }, { 0, 0, 3, 0, 3, 0, 0 }, { 0, 0, 0, -24, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 1 }, { 0, 2, 0, 0, 0, 2, 0 }, { 0, 0, 3, 0, 3, 0, 0 } }; double[,] actualGx = core.XMatrix; double[,] actualGy = core.YMatrix; //assert Debug.WriteLine("Проверка ядер свертки Gx и Gy"); for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { Assert.AreEqual(exepectedGx[i, j], actualGx[i, j]); Assert.AreEqual(exepectedGy[i, j], actualGy[i, j]); } } }
public void gradientAtPoint9_IntPoint_Test() //Проверка градиента внутренней точки { //arrange IParser parser = new Parser(); Bitmap img = parser.readPNG("Data\\sample_10.png"); MathematicialSearchPoint core = new MathematicialSearchPoint9(); core.setImage(img); double[,] X = new double[7, 7]; for (int i = 599; i < 606; i++) { for (int j = 599; j < 606; j++) { X[i - 599, j - 599] = img.GetPixel(i, j).B; //Матрица окружения точки (602,602) } } double gradX = 0; double gradY = 0; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { gradX += X[i, j] * core.XMatrix[j, i]; gradY += X[i, j] * core.YMatrix[j, i]; } } //act double exepected = (gradX + gradY) / 2; double actual = core.gradientAtPoint(602, 602); //assert Assert.AreEqual(exepected, actual); }
public void gradientAtPoint9_CornerPoint_Test() //Проверка градиента угловой точки { //arrange IParser parser = new Parser(); Bitmap img = parser.readPNG("Data\\sample_10.png"); //Blue[i, j] = 0.3 * img.GetPixel(i, j).R + 0.59 * img.GetPixel(i, j).G + 0.11 * img.GetPixel(i, j).B; //Заполнение монохромного изображения MathematicialSearchPoint core = new MathematicialSearchPoint9(); core.setImage(img); double[,] X = new double[7, 7]; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { X[i, j] = 0; } } for (int i = 3; i < 7; i++) { for (int j = 3; j < 7; j++) { X[i, j] = img.GetPixel(i - 3, j - 3).B; //Матрица окружения точки (0,0) } } double gradX = 0; double gradY = 0; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { gradX += X[i, j] * core.XMatrix[j, i]; gradY += X[i, j] * core.YMatrix[j, i]; } } //act double exepected = (gradX + gradY) / 2; double actual = core.gradientAtPoint(0, 0); //assert Assert.AreEqual(exepected, actual); }
public void gradientAtPoint9_BoundaryPoint_Test() //Проверка градиента граничной точки { //arrange IParser parser = new Parser(); Bitmap img = parser.readPNG("Data\\sample_10.png");; //Заполнение монохромного изображения MathematicialSearchPoint core = new MathematicialSearchPoint9(); core.setImage(img); double[,] X = new double[7, 7]; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { X[i, j] = 0; } } for (int i = 796; i < 800; i++) { for (int j = 0; j < 7; j++) { X[i - 796, j] = img.GetPixel(i, j).B; //Матрица окружения точки (799,3) } } double gradX = 0; double gradY = 0; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { gradX += X[i, j] * core.XMatrix[j, i]; gradY += X[i, j] * core.YMatrix[j, i]; } } //act double exepected = (gradX + gradY) / 2; double actual = core.gradientAtPoint(799, 3); //assert Assert.AreEqual(exepected, actual); }
static void Main(string[] args) { IParser parser = new Parser(); ICalculated calculated; IPreserveOBJ preserveOBJ = new PreserveOBJ(); IPreservePNG preservePNG = new PreservePNG(); IElimination elimination; IAnalysis analysis; Setting setting = null; INIManager manager; List <string> filesImagesname; string pathFolder; string pathConfig; string pathSetting; string saveFolder; if (args.Length == 0) { Console.WriteLine("usage: Get3DModel.exe <path to folder>"); Environment.Exit(-1); } pathFolder = args[0]; pathSetting = pathFolder + "\\setting.ini"; manager = new INIManager(pathSetting); string[] separators = { "\\" }; string[] words = pathFolder.Split(separators, StringSplitOptions.RemoveEmptyEntries); saveFolder = words[0]; for (int i = 1; i < words.Length - 1; i++) { saveFolder = saveFolder + "\\" + words[i]; } saveFolder = saveFolder + "\\Resulst_" + words[words.Length - 1]; Directory.CreateDirectory(saveFolder); StreamWriter timeTxt = new StreamWriter(saveFolder + "\\time.txt"); string[] listFileFolder = Directory.GetDirectories(pathFolder); foreach (string folder in listFileFolder) { FileInfo fileInfFolder = new FileInfo(folder); string nameFolder = fileInfFolder.Name; string saveFolderCurrent = saveFolder + "\\" + nameFolder; Directory.CreateDirectory(saveFolderCurrent); filesImagesname = Directory.GetFiles(folder, "*.png").ToList <string>(); pathConfig = Directory.GetFiles(folder).ToList().First( x => x.EndsWith(".camera") || x.EndsWith(".ini") || x.EndsWith("ConfigurationFile.txt")); FileInfo fileInf = new FileInfo(pathConfig); if (fileInf.Exists) { setting = new Setting(pathConfig); } else { Console.WriteLine("the configuration file is not found"); Environment.Exit(-1); } Stopwatch timeForParsing = new Stopwatch(); timeForParsing.Restart(); string nameCoreElimination = manager.GetPrivateString("ELIMINATION", "core"); IMathematical coreElimination = getMathematical(nameCoreElimination); if (coreElimination != null) { string thresholdElimination = manager.GetPrivateString("ELIMINATION", "threshold"); if (thresholdElimination != "default") { double deltaTheshold = Convert.ToDouble(thresholdElimination); coreElimination.setDeltaThreshold(deltaTheshold); } elimination = new Elimination(coreElimination); } else { elimination = new Elimination(); } for (int i = 0; i < filesImagesname.Count; i++) { if (filesImagesname[i].EndsWith("sharpImage.png")) { continue; } Data.Image itemImage = new Data.Image(filesImagesname[i]); elimination.calculateGradientImage(itemImage); } List <Data.Point> goodPoint = elimination.getSolution(); string boolSelectionCore = manager.GetPrivateString("SELECTION_CORE", "selection_core"); if (boolSelectionCore == "true") { string nameCore3x3 = manager.GetPrivateString("CORE", "3_core"); IMathematical core3x3 = getMathematical(nameCore3x3); if (core3x3 == null) { core3x3 = new MathematicialSearchPoint1(); } string nameCore5x5 = manager.GetPrivateString("CORE", "5_core"); IMathematical core5x5 = getMathematical(nameCore5x5); if (core5x5 == null) { core5x5 = new MathematicialSearchPoint8(); } string nameCore7x7 = manager.GetPrivateString("CORE", "7_core"); IMathematical core7x7 = getMathematical(nameCore5x5); if (core7x7 == null) { core7x7 = new MathematicialSearchPoint9(); } analysis = new Analysis(goodPoint, core3x3, core5x5, core7x7); for (int i = 0; i < filesImagesname.Count; i++) { if (filesImagesname[i].EndsWith("sharpImage.png")) { continue; } Data.Image itemImage = new Data.Image(filesImagesname[i]); analysis.addImageAnalysis(itemImage); } List <IMathematical> coreGoodPoint = analysis.getCore(); calculated = new Calculated(); calculated.createdBeginSolution(); for (int i = 0; i < filesImagesname.Count; i++) { if (filesImagesname[i].EndsWith("sharpImage.png")) { continue; } Data.Image itemImage = new Data.Image(filesImagesname[i]); calculated.clarifySolution(itemImage, coreGoodPoint, goodPoint); } } else { string nameCore = manager.GetPrivateString("SELECTION_CORE", "default_core"); IMathematical core = getMathematical(nameCore); if (core == null) { core = new MathematicialSearchPoint1(); } calculated = new Calculated(core); calculated.createdBeginSolution(); for (int i = 0; i < filesImagesname.Count; i++) { if (filesImagesname[i].EndsWith("sharpImage.png")) { continue; } Data.Image itemImage = new Data.Image(filesImagesname[i]); calculated.clarifySolution(itemImage, goodPoint); } } Solution solution = calculated.getSolution(); timeForParsing.Stop(); timeTxt.WriteLine(nameFolder + " - " + timeForParsing.ElapsedMilliseconds + " timeForParsing"); preserveOBJ.saveOBJ(solution, setting, saveFolderCurrent); preservePNG.savePNG(solution, saveFolderCurrent); saveDat(solution.Map, saveFolderCurrent); } timeTxt.Close(); }