コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Analysis.cs プロジェクト: sunsunsun000/captchaReg
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        //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());
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
            }
        }
コード例 #12
0
        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);
        }
コード例 #13
0
 public static double[,] ThinImage(double[,] image, int rows, int columns)
 {
     return(Thining.ThinPicture(image));
 }
コード例 #14
0
        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();
        }