public void TestWithAdequateMinutiaeSet() { int[,] mask = Segmentator.Segmetator(img, windowSize, weight, threshold); double[,] binaryImage = img; // //--------------------------------------- double sigma = 1.4d; double[,] smoothing = LocalBinarizationCanny.Smoothing(binaryImage, sigma); double[,] sobel = LocalBinarizationCanny.Sobel(smoothing); double[,] nonMax = LocalBinarizationCanny.NonMaximumSupperession(sobel); nonMax = GlobalBinarization.Binarization(nonMax, 60); nonMax = LocalBinarizationCanny.Inv(nonMax); int sizeWin = 16; binaryImage = LocalBinarizationCanny.LocalBinarization(binaryImage, nonMax, sizeWin, 1.3d); //--------------------------------------- binaryImage = Thining.ThinPicture(binaryImage); //--------------------------------------- List <Minutia> minutiae = MinutiaeDetection.FindMinutiae(binaryImage); for (int i = 0; i < minutiae.Count; i++) { if (mask[minutiae[i].Y, minutiae[i].X] == 0) { minutiae.Remove(minutiae[i]); i--; } } minutiae = MinutiaeDetection.FindBigMinutiae(minutiae); var response = MCC.MCCMethod(minutiae, img.GetLength(0), img.GetLength(1)); SaveResponse(response, minutiae); }
public void TestMethod6() { double[,] img = ImageHelper.LoadImage(TestResource._81_7); double sigma = 1.4d; double[,] smoothing = LocalBinarizationCanny.Smoothing(img, sigma); double[,] sobel = LocalBinarizationCanny.Sobel(smoothing); double[,] nonMax = LocalBinarizationCanny.NonMaximumSupperession(sobel); nonMax = GlobalBinarization.Binarization(nonMax, 60); nonMax = LocalBinarizationCanny.Inv(nonMax); int sizeWin = 16; double[,] resImg = LocalBinarizationCanny.LocalBinarization(img, nonMax, sizeWin, 1.3d); PoreFilter.DeletePores(resImg); var path = Path.GetTempPath() + "BinarizatedPoreFiltred81_7.png"; ImageHelper.SaveArray(resImg, path); Process.Start(path); var path2 = Path.GetTempPath() + "Thinned81_7.png"; var resImg2 = Thining.ThinPicture(resImg); ImageHelper.SaveArray(resImg2, path2); Process.Start(path2); var list = MinutiaeDetection.FindMinutiae(resImg2); var list2 = MinutiaeDetection.FindBigMinutiae(list); var path3 = Path.GetTempPath() + "MinutiaeMatchedTest81_7.png"; ImageHelper.MarkMinutiae(path2, list2, path3); Process.Start(path3); }
private void 细化ToolStripMenuItem_Click(object sender, EventArgs e) { Bitmap twobmp = (Bitmap)pictureBox1.Image; Byte[,] binaryBmp = PicUtils.ToBinaryArray(twobmp); binaryBmp = Thining.ThinPicture(binaryBmp); pictureBox1.Image = PicUtils.BinaryArrayToBinaryBitmap(binaryBmp); }
public void TestMethod3() { //var img = ImageHelper.LoadImage(TestResource._104_6); var img = ImageHelper.LoadImage(TestResource.ThiningImageTest3); var path = Path.GetTempPath() + "thininig.png"; var thining = Thining.ThinPicture(img); ImageHelper.SaveArray(thining, path); Process.Start(path); }
//public List<Minutia> FindMinutiae(float[] image, int rows, int columns, bool useCuda = false) //{ // if (useCuda) // { // return new List<Minutia>(); // } // return // MinutiaeDetection.FindBigMinutiae( // MinutiaeDetection.FindMinutiae(image.Select(x => (double) x).ToArray().Make2D(rows, columns))); //} public float[] ThinImage(float[] image, int rows, int columns, bool useCuda = false) { if (useCuda) { var result = new float[rows * columns]; CUDAThining(image, columns, rows, result); return(result); } return (Thining.ThinPicture(image.Make2D(rows, columns).Select2D(x => (double)x)) .Select2D(x => (float)x) .Make1D()); }
public void TestMethod7() { //var img = ImageHelper.LoadImage(TestResource._104_6); //ImageHelper.SaveImageAsBinaryFloat("C:\\cuda-fingerprinting\\CUDAFingerprinting.TemplateBuilding.Minutiae.BinarizationThinking.Tests\\Resources\\104_61globalBinarization150.png", "C:\\temp\\104_6_Binarizated.bin"); ImageHelper.SaveBinaryAsImage("C:\\temp\\104_6_BinarizatedThinnedMinutiaeMatchedCUDA.bin", "C:\\temp\\104_6_BinarizatedThinnedMinutiaeMatchedCUDA.png", true); //ImageHelper.SaveIntArray(); var img = ImageHelper.LoadImage(TestResource._104_61globalBinarization150); var path = Path.GetTempPath() + "thininig.png"; var thining = Thining.ThinPicture(img); ImageHelper.SaveArray(thining, path); Process.Start(path); }
public void TestMethod2() { //var img = ImageHelper.LoadImage(TestResource._104_6); var img = ImageHelper.LoadImage(TestResource._104_6); double board = 5; var thining = Thining.ThinPicture(GlobalBinarization.Binarization(img, board)); var path = Path.GetTempPath() + "MinutiaeMarkedThinnedBinarizated" + board + ".png"; ImageHelper.MarkMinutiae(ImageHelper.SaveArrayToBitmap(thining), MinutiaeDetection.FindMinutiae(thining), path); //Trace.WriteLine(MinutiaeDetection.FindMinutiae(img)); //ImageHelper.SaveArray(Detection, path); //ImageHelper.SaveArray(thining, path); Process.Start(path); }
public void TestMethod4() { //var img = ImageHelper.LoadImage(TestResource._104_6); ImageHelper.SaveImageAsBinaryFloat("C:\\Users\\CUDA Fingerprinting2\\Documents\\Fingerprints\\Databases\\FVC2000\\Dbs\\Db2_a\\81_8.tif", "C:\\temp\\81_8.bin"); ImageHelper.SaveBinaryAsImage("C:\\temp\\81_8.bin", "C:\\temp\\81_8.png", true); ImageHelper.SaveBinaryAsImage("C:\\temp\\MinutiaeMatched81_81.bin", "C:\\temp\\MinutiaeMatched81_81.png", true); Process.Start("C:\\temp\\MinutiaeMatched81_81.png"); //ImageHelper.SaveBinaryAsImage("C:\\temp\\104_6_MinutiaeBigMatched.bin", "C:\\temp\\104_6_MinutiaeBigMatched.png", true); //ImageHelper.SaveIntArray(); var img = ImageHelper.LoadImage(TestResource._104_61globalBinarization150); var path = Path.GetTempPath() + "thininig.png"; var thining = Thining.ThinPicture(img); ImageHelper.SaveArray(thining, path); Process.Start(path); }
public void TestMcc() { int[,] maskOfSegmentation2D = Segmentator.Segmetator(img, windowSize, weight, threshold); var thining = Thining.ThinPicture(GlobalBinarization.Binarization(img, board)); List <Minutia> minutiaList = MinutiaeDetection.FindMinutiae(thining); List <Minutia> validMinutiae = new List <Minutia>(); foreach (Minutia minutia in minutiaList) { if (maskOfSegmentation2D[minutia.Y, minutia.X] == 1) // coordinates swap - ok { validMinutiae.Add(minutia); } } var response = MCC.MCCMethod(validMinutiae, thining.GetLength(0), thining.GetLength(1)); SaveResponse(response, validMinutiae); }
public void TestMethod1() { //var img = ImageHelper.LoadImage(TestResource._104_6); double sigma = 1.4d; var img = ImageHelper.LoadImage(TestResource._90_3); double[,] smoothing = LocalBinarizationCanny.Smoothing(img, sigma); double[,] sobel = LocalBinarizationCanny.Sobel(smoothing); double[,] nonMax = LocalBinarizationCanny.NonMaximumSupperession(sobel); nonMax = GlobalBinarization.Binarization(nonMax, 60); nonMax = LocalBinarizationCanny.Inv(nonMax); int sizeWin = 16; double[,] resImg = LocalBinarizationCanny.LocalBinarization(img, nonMax, sizeWin, 1.3d); var path = Path.GetTempPath() + "thininig.png"; var thining = Thining.ThinPicture(img); ImageHelper.SaveArray(thining, path); Process.Start(path); }
public void FindDirectionTest() { for (int cur = 1; cur <= 10; cur++) { double[,] startImg = ImageHelper.LoadImage(TestResource.SampleFinger2); int imgHeight = startImg.GetLength(0); int imgWidth = startImg.GetLength(1); //------------------------------- int[] mask = new int[imgHeight * imgWidth]; int windowSize = 12; float WeightConstant = 0.3F; int maskHeight = imgHeight / windowSize; int maskWidth = imgWidth / windowSize; float[] imgToSegmentator = new float[imgHeight * imgWidth]; for (int i = 0; i < imgHeight; i++) { for (int j = 0; j < imgWidth; j++) { imgToSegmentator[i * imgWidth + j] = (float)startImg[i, j]; } } CUDASegmentator(imgToSegmentator, imgWidth, imgHeight, WeightConstant, windowSize, mask, maskWidth, maskHeight); //---------------------------------- double sigma = 1.4d; double[,] smoothing = LocalBinarizationCanny.Smoothing(startImg, sigma); double[,] sobel = LocalBinarizationCanny.Sobel(smoothing); double[,] nonMax = LocalBinarizationCanny.NonMaximumSupperession(sobel); nonMax = GlobalBinarization.Binarization(nonMax, 60); nonMax = LocalBinarizationCanny.Inv(nonMax); int sizeWin = 16; startImg = LocalBinarizationCanny.LocalBinarization(startImg, nonMax, sizeWin, 1.3d); startImg = GlobalBinarization.Binarization(startImg, 140); //------------------------------- startImg = Thining.ThinPicture(startImg); //------------------------------- for (int i = 0; i < imgHeight; i++) { for (int j = 0; j < imgWidth; j++) { if (mask[i / windowSize * maskWidth + j / windowSize] == 0) { startImg[i, j] = 255; } } } //var path1 = System.IO.Path.GetTempPath() + "lol.png"; //ImageHelper.SaveArray(startImg, path1); //------------------------------- int[,] BinaryImage = ImageHelper.ConvertDoubleToInt(startImg); double[,] OrientationField = Common.OrientationField.OrientationFieldGenerator.GenerateOrientationField( BinaryImage); //------------------------------- Stopwatch sw = new Stopwatch(); List <Minutia> Minutiae = MinutiaeDetection.FindMinutiae(startImg); //-------------------------------- List <Minutia> TrueMinutiae = new List <Minutia>(); for (int i = 0; i < Minutiae.Count; i++) { if (mask[Minutiae[i].Y / windowSize * maskWidth + Minutiae[i].X / windowSize] != 0) { TrueMinutiae.Add(Minutiae[i]); } } Minutiae = TrueMinutiae; //-------------------------------- sw.Start(); Minutiae = MinutiaeDetection.FindBigMinutiae(Minutiae); sw.Stop(); //------------------------------- /*MinutiaeDirection.FindDirection(OrientationField, 16, Minutiae, BinaryImage, 1); * * //------------------------------- * * var path = "D:\\MyData\\Documents\\Results\\1\\" + cur + ".png"; * ImageHelper.MarkMinutiaeWithDirections(path1, Minutiae, path); * * //------------------------------- * * MinutiaeDirection.FindDirection(OrientationField, 16, Minutiae, BinaryImage, 4); * * //------------------------------- * * path = "D:\\MyData\\Documents\\Results\\2\\" + cur + ".png"; * ImageHelper.MarkMinutiaeWithDirections(path1, Minutiae, path); * * //------------------------------- * * MinutiaeDirection.FindDirection(OrientationField, 16, Minutiae, BinaryImage, 2); * * //------------------------------- * * path = "D:\\MyData\\Documents\\Results\\3\\" + cur + ".png"; * ImageHelper.MarkMinutiaeWithDirections(path1, Minutiae, path);*/ //------------------------------- MinutiaeDirection.FindDirection(OrientationField, 16, Minutiae, BinaryImage, 4); Trace.WriteLine(string.Format("Minutiae detection and direction took {0} ms", sw.ElapsedMilliseconds)); //------------------------------- var path = Path + Guid.NewGuid() + ".png"; ImageHelper.MarkMinutiaeWithDirections(TestResource.SampleFinger2, Minutiae, path); Process.Start(path); } }
private static void TestCUDADirections() { double[,] startImg = ImageHelper.LoadImage(Resources._7_6start); int imgHeight = startImg.GetLength(0); int imgWidth = startImg.GetLength(1); int[] mask = new int[imgHeight * imgWidth]; int windowSize = 12; float WeightConstant = 0.3F; int maskHeight = imgHeight / windowSize; int maskWidth = imgWidth / windowSize; float[] imgToSegmentator = new float[imgHeight * imgWidth]; for (int i = 0; i < imgHeight; i++) { for (int j = 0; j < imgWidth; j++) { imgToSegmentator[i * imgWidth + j] = (float)startImg[i, j]; } } CUDASegmentator(imgToSegmentator, imgWidth, imgHeight, WeightConstant, windowSize, mask, maskWidth, maskHeight); double[,] binaryImage = ImageHelper.LoadImage(Resources._7_6); //--------------------------------------- double sigma = 1.4d; double[,] smoothing = LocalBinarizationCanny.Smoothing(binaryImage, sigma); double[,] sobel = LocalBinarizationCanny.Sobel(smoothing); double[,] nonMax = LocalBinarizationCanny.NonMaximumSupperession(sobel); nonMax = GlobalBinarization.Binarization(nonMax, 60); nonMax = LocalBinarizationCanny.Inv(nonMax); int sizeWin = 16; binaryImage = LocalBinarizationCanny.LocalBinarization(binaryImage, nonMax, sizeWin, 1.3d); //--------------------------------------- binaryImage = Thining.ThinPicture(binaryImage); //--------------------------------------- List <Minutia> Minutiae = MinutiaeDetection.FindMinutiae(binaryImage); for (int i = 0; i < Minutiae.Count; i++) { if (mask[Minutiae[i].Y / windowSize * maskWidth + Minutiae[i].X / windowSize] == 0) { Minutiae.Remove(Minutiae[i]); i--; } } Minutiae = MinutiaeDetection.FindBigMinutiae(Minutiae); //-------------------------------------- int[,] intImage = ImageHelper.ConvertDoubleToInt(binaryImage); double[,] OrientationField = OrientationFieldGenerator.GenerateOrientationField(intImage); for (int i = 0; i < OrientationField.GetLength(0); i++) { for (int j = 0; j < OrientationField.GetLength(1); j++) { if (OrientationField[i, j] < 0) { OrientationField[i, j] += Math.PI; } } } //-------------------------------------- int orHeight = OrientationField.GetLength(0); int orWidth = OrientationField.GetLength(1); double[] myOrientationField = new double[orHeight * orWidth]; for (int i = 0; i < orHeight; i++) { for (int j = 0; j < orWidth; j++) { myOrientationField[i * orWidth + j] = OrientationField[i, j]; } } //--------------------------------------- int NoM = Minutiae.Count; int[] myMinutiae = new int[2 * NoM]; for (int i = 0; i < NoM; i++) { myMinutiae[2 * i] = Minutiae[i].X; myMinutiae[2 * i + 1] = Minutiae[i].Y; } //----------------------------------------------- double[] Directions = new double[NoM]; //------------------------------------------ int[] BinaryImage = new int[imgWidth * imgHeight]; for (int i = 0; i < imgHeight; i++) { for (int j = 0; j < imgWidth; j++) { BinaryImage[i * imgWidth + j] = intImage[i, j]; } } //---------------------------------------- FindDirection(myOrientationField, orHeight, orWidth, 16, myMinutiae, NoM, BinaryImage, imgHeight, imgWidth, Directions); for (int i = 0; i < NoM; i++) { var temp = Minutiae[i]; temp.Angle = Directions[i]; Minutiae[i] = temp; } var path1 = Path.GetTempPath() + "binaryImage.png"; ImageHelper.SaveArray(binaryImage, path1); var path2 = Path.GetTempPath() + "checkYourself.png"; ImageHelper.MarkMinutiaeWithDirections(path1, Minutiae, path2); Process.Start(path2); }
public static double[,] ThinImage(double[,] image, int rows, int columns) { return(Thining.ThinPicture(image)); }
public void TestMethod5() { //var img = ImageHelper.LoadImage(TestResource._104_6); //var img = ImageHelper.LoadImage("C:\\Users\\CUDA Fingerprinting2\\picture.in"); double[,] img = new double[, ] { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }; //var path = "C:\\Users\\CUDA Fingerprinting2\\" + "thininig.png"; var thining = Thining.ThinPicture(img); // //var img1 = ImageHelper.LoadImage(TestResource.ThiningImageTest3); // var img2 = ImageHelper.LoadImageAsInt(TestResource._104_61globalBinarization150); // for (int j = 0; j < img2.GetLength(0); j++) // { // for (int i = 0; i < img2.GetLength(1); i++) // { // Console.Write(img2[j, i] + " "); // } // Console.WriteLine(); // } // //for (int j = 0; j < thining.GetLength(0); j++) // //{ // // for (int i = 0; i < thining.GetLength(1); i++) // // { // // Console.Write(thining[j, i] + " "); // // } // // Console.WriteLine(); // //} // //Process.Start(); }