Example #1
0
        /// <summary>
        /// Save and read Image Deskew
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        //public static string SaveAndRead(string filename)
        //{
        //    const double MINIMUM_DESKEW_THRESHOLD = 0.05d;
        //    //string bmstr = @"C:\Users\admin\source\repos\RGB2Gray\japan3.png";
        //    var bmstr = filename;
        //    var temFile = bmstr.Substring(bmstr.LastIndexOf('\\') + 1);
        //    var temFile2 = temFile.Substring(0, temFile.LastIndexOf('.'));
        //    string graystr = bmstr.Substring(0, bmstr.LastIndexOf('\\') + 1) + temFile2 + "Deskew2.png";
        //    Console.WriteLine(graystr);

        //    Bitmap sourcebm = null;
        //    Bitmap graybm = null;

        //    if (!File.Exists(graystr))
        //    {
        //        try
        //        {
        //            Stopwatch stpWatch = Stopwatch.StartNew();
        //            sourcebm = new Bitmap(bmstr);
        //            //Using deskew algorithm here
        //            gmseDeskew skew= new gmseDeskew(sourcebm);
        //            double imageSkewAngle = skew.GetSkewAngle();
        //            if (imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle <-(MINIMUM_DESKEW_THRESHOLD))
        //            {
        //                Console.WriteLine("imageSkewAngle: " + imageSkewAngle);
        //                graybm = RotateImage2((Bitmap)skew.cBmp, -imageSkewAngle);


        //                graybm.Save(graystr);
        //                stpWatch.Stop();
        //                var t = stpWatch.Elapsed.TotalMilliseconds.ToString();
        //                Console.WriteLine("Convert RGB to Gray sucessfully within {0} ms", t);
        //                return graystr;

        //            }
        //            return null;

        //        }
        //        catch (Exception e)
        //        {

        //            Console.WriteLine("Error message" + e.Message);
        //            return null;
        //        }
        //        finally
        //        {
        //            if (sourcebm != null)
        //            {
        //                sourcebm.Dispose();
        //            }
        //            if (graybm != null)
        //            {
        //                graybm.Dispose();
        //            }

        //        }


        //    }
        //    return graystr;



        //}

        // Return deskewedImage
        public static Bitmap DeskewImage(Image currentImg)
        {
            const double MINIMUM_DESKEW_THRESHOLD = 0.05d;
            //string bmstr = @"C:\Users\admin\source\repos\RGB2Gray\japan3.png";
            //var bmstr = filename;
            //var temFile = bmstr.Substring(bmstr.LastIndexOf('\\') + 1);
            //var temFile2 = temFile.Substring(0, temFile.LastIndexOf('.'));
            //string graystr = bmstr.Substring(0, bmstr.LastIndexOf('\\') + 1) + temFile2 + "Deskew2.png";
            //Console.WriteLine(graystr);

            Bitmap sourcebm = null;
            Bitmap graybm   = null;

            sourcebm = new Bitmap(currentImg);
            //Using deskew algorithm here
            gmseDeskew skew           = new gmseDeskew(sourcebm);
            double     imageSkewAngle = skew.GetSkewAngle();

            if (imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))
            {
                Console.WriteLine("imageSkewAngle: " + imageSkewAngle);
                graybm = RotateImage2((Bitmap)skew.cBmp, -imageSkewAngle);
                //graybm = gmseDeskew.CropRotationRect((Bitmap)skew.cBmp, new Rectangle(26,146, 676, 109), (float)-imageSkewAngle, true);
                return(graybm);
            }
            else
            {
                return(sourcebm);
            }
        }
Example #2
0
        public static string SaveAndRead(string filename)
        {
            const double MINIMUM_DESKEW_THRESHOLD = 0.05d;
            //string bmstr = @"C:\Users\admin\source\repos\RGB2Gray\japan3.png";
            var    bmstr    = filename;
            var    temFile  = bmstr.Substring(bmstr.LastIndexOf('\\') + 1);
            var    temFile2 = temFile.Substring(0, temFile.LastIndexOf('.'));
            string graystr  = bmstr.Substring(0, bmstr.LastIndexOf('\\') + 1) + temFile2 + "Deskew2.png";

            Console.WriteLine(graystr);

            Bitmap sourcebm = null;
            Bitmap graybm   = null;

            if (!File.Exists(graystr))
            {
                try
                {
                    Stopwatch stpWatch = Stopwatch.StartNew();
                    sourcebm = new Bitmap(bmstr);
                    //Using deskew algorithm here
                    gmseDeskew skew           = new gmseDeskew(sourcebm);
                    double     imageSkewAngle = skew.GetSkewAngle();
                    if (imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))
                    {
                        Console.WriteLine("imageSkewAngle: " + imageSkewAngle);
                        graybm = RotateImage2((Bitmap)skew.cBmp, -imageSkewAngle);


                        graybm.Save(graystr);
                        stpWatch.Stop();
                        var t = stpWatch.Elapsed.TotalMilliseconds.ToString();
                        Console.WriteLine("Convert RGB to Gray sucessfully within {0} ms", t);
                        return(graystr);
                    }
                    return(null);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error message" + e.Message);
                    return(null);
                }
                finally
                {
                    if (sourcebm != null)
                    {
                        sourcebm.Dispose();
                    }
                    if (graybm != null)
                    {
                        graybm.Dispose();
                    }
                }
            }
            return(graystr);
        }
Example #3
0
        /// <summary>
        /// This is used to automatically find skewAngle and skew
        /// </summary>
        /// <param name="source"></param>
        /// <param name="rect"></param>
        /// <param name="HighQuality"></param>
        /// <returns></returns>
        public static Bitmap CropRotationRect2(Bitmap source, Rectangle rect, bool HighQuality)
        {
            int addition = (int)Math.Sqrt(rect.Width * rect.Width + rect.Height * rect.Height) - rect.Width;

            rect = new Rectangle(rect.X - (int)addition / 2, rect.Y, (int)Math.Sqrt(rect.Width * rect.Width + rect.Height * rect.Height), rect.Height);
            //Crop function first
            Image img = CropImage.Crop(source, rect);

            //Get skewAngle first time
            double imageSkewAngle_temp = 100;   //initial skew angle
            double imageSkewAngle      = 0;     //not skew
            int    iter = 0;                    //iteration

            while (Math.Abs(imageSkewAngle_temp) > 0.1 && iter < 5)
            {
                var skew = new gmseDeskew(ImageConverter.BitmapImage2Bitmap(ImageConverter.Image2BitmapImage(img)));
                imageSkewAngle_temp = skew.GetSkewAngle();
                imageSkewAngle      = imageSkewAngle + imageSkewAngle_temp;
                img  = gmseDeskew.DeskewImage(img);
                iter = iter + 1;
            }


            Debug.WriteLine("Goc skew tich luy sau loop: " + imageSkewAngle.ToString());


            Bitmap result = new Bitmap(rect.Width, rect.Height);

            using (Graphics g = Graphics.FromImage(result))
            {
                g.InterpolationMode = HighQuality ? InterpolationMode.HighQualityBicubic : InterpolationMode.Default;
                using (Matrix mat = new Matrix())
                {
                    mat.Translate(-rect.X, -rect.Y);
                    mat.RotateAt(-(float)imageSkewAngle, new Point(rect.X + (int)rect.Width / 2, rect.Y + (int)rect.Height / 2));
                    g.Transform = mat;
                    g.DrawImage(source, new Point(0, 0));
                }
            }
            return(result);
        }
Example #4
0
        //perform use skew angle from Deskew algorithm
        /// <summary>
        /// This method is used to find skewAngle with specificed time and skew
        /// </summary>
        /// <param name="source"></param>
        /// <param name="rect"></param>
        /// <param name="HighQuality"></param>
        /// <returns></returns>
        public static Bitmap CropRotationRect(Bitmap source, Rectangle rect, bool HighQuality)
        {
            //Crop function first
            Image img = CropImage.Crop(source, rect);

            //Get skewAngle first time
            gmseDeskew skew           = new gmseDeskew(ImageConverter.BitmapImage2Bitmap(ImageConverter.Image2BitmapImage(img)));
            double     imageSkewAngle = skew.GetSkewAngle();

            //Accumulate skewAngle second time
            Bitmap img2 = gmseDeskew.DeskewImage(ImageConverter.BitmapImage2Bitmap(ImageConverter.Image2BitmapImage(img)));

            skew           = new gmseDeskew(img2);
            imageSkewAngle = imageSkewAngle + skew.GetSkewAngle();

            //Accumulate skewAngle third time
            //Bitmap img3 = gmseDeskew.DeskewImage(img2);
            //gmseDeskew skew3 = new gmseDeskew(img3);
            //imageSkewAngle = imageSkewAngle + skew3.GetSkewAngle();


            Debug.WriteLine("Goc skew sau 2 lan tim: " + imageSkewAngle.ToString());


            Bitmap result = new Bitmap(rect.Width, rect.Height);

            using (Graphics g = Graphics.FromImage(result))
            {
                g.InterpolationMode = HighQuality ? InterpolationMode.HighQualityBicubic : InterpolationMode.Default;
                using (Matrix mat = new Matrix())
                {
                    mat.Translate(-rect.X, -rect.Y);
                    mat.RotateAt(-(float)imageSkewAngle, new Point(rect.X + (int)rect.Width / 2, rect.Y + (int)rect.Height / 2));
                    g.Transform = mat;
                    g.DrawImage(source, new Point(0, 0));
                }
            }
            return(result);
        }