字符图像细化

时间:2011-08-23 03:04:26

标签: image-processing computer-vision ocr

我正在做一个ocr应用程序。我很困惑,如何扭曲像这样的图像:

enter image description here

其次,我有一个字体大小很多的字符图像。问题是:如何将它们细化到像这样的大小

http://upload.wikimedia.org/wikipedia/commons/9/93/Skel.png

2 个答案:

答案 0 :(得分:3)

对于您的第一点:找到文本旋转的角度,然后按该角度旋转图像。在您的样本中,您可以通过查找边缘上的大黑色斑点和白色区域之间的线条角度来实现此目的。查看edge detectionhough transform以帮助您找到线条,然后帮助您找到它们的角度。 OpenCV可以很好地实现这两种算法。

关于你的第二点:那就是行动中的形态学操作binary skeleton

答案 1 :(得分:0)

您可以使用以下代码来检测和纠正偏斜,但如果您获得任何细化算法,我需要您的帮助...因为输入图像在图片框上....

        try
        {
            //Check if there exists an image on the picture box
            if (pictureBox1.Image == null)
            {
                MessageBox.Show("Please load an image first.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                uploadImageToolStripMenuItem.PerformClick();
                return;
            }                
            Bitmap image = new Bitmap(pictureBox1.Image);
            BitmapData imageData = image.LockBits(new Rectangle(0, 0, image.Width, image.Height),
                                    ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);
            //document image skew detection starts here
            DocumentSkewChecker skewChecker = new DocumentSkewChecker();
            // get documents skew angle
            double angle = skewChecker.GetSkewAngle(imageData);
            // create rotation filter and rotate image applying the filter
            RotateBilinear rotationFilter = new RotateBilinear(-angle);
            rotationFilter.FillColor = Color.White;
            image.UnlockBits(imageData);
            //if the angle is more 90 or 180, consider it as a normal image or if it is not, perform a skew correction
            if (-angle == 90 || -angle == 180)
            {
                pictureBox1.Image = image;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                return;
            }

            //Bitmap rotatedImage = rotationFilter.Apply();
            //draw a bitmap based on the skew angle...
            Bitmap returnBitmap = new Bitmap(image.Width, image.Height);
            Graphics g = Graphics.FromImage(returnBitmap);
            g.TranslateTransform((float)image.Width / 2, (float)image.Height / 2);
            g.RotateTransform(((float)angle));
            g.TranslateTransform(-(float)image.Width / 2, -(float)image.Height / 2);
            g.DrawImage(image, new Point(0, 0));

            pictureBox1.Image = returnBitmap;
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }