65.9K
CodeProject 正在变化。 阅读更多。
Home

提高彩色文档的 OCR 准确性

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009年12月1日

CPOL

13分钟阅读

viewsIcon

31524

使用 Image Detergent™ 在 OCR 之前清理彩色文档图像以获得更好的结果使用 Image Detergent™ 在 OCR 之前清理彩色文档图像以获得更好的结果。

摘要

这篇白皮书证实,可以改进行业标准的彩色文档图像清理实践,以产生更高的 OCR 准确性。Accusoft Pegasus 的 Image Detergent™ 比标准的平滑滤镜可以将 OCR 准确性提高 5-10%。本文将引导读者了解证明这一点的测试。

标准的平滑算法提供了一种减少背景噪声和改善扫描文档外观的好方法。然而,它们也会极大地破坏文档图像中常见的文本和其他数据。Accusoft Pegasus 的 ScanFix® Xpress 软件开发工具包 (SDK) 中的 Image Detergent 滤镜的工作原理与其他平滑滤镜不同,并且专门用于彩色文档图像。本文探讨了 Image Detergent 平滑滤镜对包含各种文本和背景颜色的彩色文档图像的影响。定量测量了两个项目:OCR 准确性和清理后的文件大小。使用 Image Detergent 可以显着提高 OCR 准确性,并且在处理 Image Detergent 后的图像时,无损和有损压缩方法的两类图像的文件大小都明显减小。

Image Detergent 仅在 Accusoft Pegasus 的 ScanFix Xpress 中可用。您可以在此处下载试用版:http://www.accusoft.com/scanfix.htm

image001.png

图 1 使用 Image Detergent 清理后的图像(顶部为处理前,底部为处理后)的片段

引言

噪声是数字信号处理所有领域中的一个常见问题,文档成像领域也不例外。图像中的噪声通常表现为斑点或颜色变化,而这是不需要的。上图就展示了这一点;图像上半部分的粉红色背景由许多不同深浅的粉红色组成。这种变化不包含任何有用信息,可以被实心颜色取代,如图下半部分所示。噪声来自多种来源,包括物理来源,如纸张颜色变化、扫描仪或纸张上的灰尘和绒毛,以及软件来源,如失真压缩。JPEG 压缩算法使用的失真压缩可以实现非常高的压缩率,但代价是改变图像中的像素——因此称为“失真”描述。JPEG 压缩的常见副作用之一是围绕颜色锐利过渡的斑点。

平滑滤镜是一种通过混合相邻像素来消除彩色图像噪声的常用方法,以减弱区域颜色微小变化的影响。这种技术在信号处理中被称为低通滤波器,因为它允许低频数据(随时间缓慢变化)通过,并阻止高频数据(快速变化)。在图像处理中,平滑滤镜与其他大多数滤镜一样,是一种形态学滤镜,这意味着它会改变图像的形态或形状。形态学滤镜除了具有减少噪声的期望行为外,还会产生模糊和软化锐边的副作用,如下所示。

image002.jpg

图 2 噪点信号(左上)与越来越强的平滑滤镜(左下、右上、右下)进行平滑处理后,噪声越来越小,但原始信号中的锐利边缘也越来越平坦。

这对于照片等高频数据很少的图像来说可能不是问题,但对于充满锐利边缘和细线的文档图像——两者都包含许多高频——低通滤镜可能会非常有破坏性。Image Detergent 滤镜正是为了解决这种情况而设计的。

Image Detergent 不像形态学那样通过混合图像中同一区域的像素来工作,而是通过颜色空间进行平滑处理。颜色空间可以最好地想象成一个立方体,具有 X、Y 和 Z 轴。在最常见的颜色空间 RGB 中,轴对应于混合在一起形成颜色空间中任何颜色的红、绿、蓝的百分比。Image Detergent 在 RGB 颜色空间中工作,将颜色空间中距离近的颜色拉近。由于图像中像素的位置没有改变,因此不会发生线条或边缘的模糊,但经 Image Detergent 清理的颜色区域会变得平滑且无噪声。

本文将探讨 Image Detergent 对各种文档处理操作的影响。基线数据集包含一些“原始”文档图像,这些图像已通过彩色扫描仪捕获并以未压缩格式存储。这些原始图像将使用不同的图像处理方法进行过滤和压缩,并将所得的修改图像与原始图像进行比较,以使用常见的有损和无损压缩算法确定这些图像处理方法对光学字符识别和文件大小的影响。

OCR 识别的假设

Image Detergent 将提高 OCR 识别率,并减小压缩图像的图像大小。

方法

二值化原始图像,应用 OCR 并测量识别准确率。然后,对这些相同的原始图像应用 Image Detergent,然后进行二值化,应用 OCR,并测量识别准确率。与初始结果进行比较。对图像文件大小采用相同的方法。

数据集

数据集包含在彩色激光打印机在彩色纸上打印的多份文档。每份文档都重复使用相同的文本,采用 14 和 12 磅的字体。

纸张颜色 字体 墨水颜色
白色 Arial 黑色
象牙白 Times New Roman 红色
蓝色 Courier 绿色
粉红色   蓝色
黄色    

文本包括以下内容,并针对所有所需的组合进行了复制

14 磅彩色扫描可为您提供更多信息。现在您可以使用它了。敏捷的棕色狐狸跳过了懒惰的母鸡。现在是所有好人效忠国家的时候了。

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
~!@#$%^&*()_+

使用一台较旧的 Fujitsu® 4750C 彩色扫描仪扫描了这些文档,以模拟常见的生产环境。文档以 150、200 和 300 dpi 的分辨率扫描,但 200 和 300 dpi 的图像被重新采样到 150 dpi 进行此测试。图像以无损 TIFF 格式存储。分析中使用的扫描页面总数为 180。扫描仪的默认设置自动调整了象牙白和白色纸张的亮度,导致背景颜色非常接近纯白色。蓝色、粉红色和黄色纸张的颜色分别为 0xb0f0f8、0xf8c8d8 和 0xf8f8c8。

150 dpi 的分辨率被确定为可靠 OCR 12 磅及以上文本的临界分辨率,因此分析集中在 12 磅和 14 磅文本上。通过关注临界情况,可以轻松确定 OCR 准确性的变化。本文图 1 所示的图像包含粉红色纸上的绿色墨水,它很好地说明了在识别彩色图像中的字符时遇到的困难。

清理方法

用于生成此分析数据的 trei 是 Accusoft Pegasus 的三个软件开发工具包。每个工具包都专注于不同的成像领域,所有工具包都设计为可以轻松协同工作。ImagXpress 工具包是一个通用的照片和文档成像 SDK,用于打开和解压缩图像。ImagXpress 支持广泛的文件格式(请参阅 www.accusoft.com/imagxpressformats.htm),包括流行的文档成像格式,如 TIFF 和 JBIG2,以及 JPEG 和 JPEG 2000 等彩色格式。SmartZone™ 是 FormSuite™ SDK 的一部分,是一款具有易于使用的程序员界面的区域 OCR 工具(www.accusoft.com/formsuite.htm)。测试中使用的第三个工具包是扫描图像清理工具包 ScanFix Xpress。

使用 ImagXpress 将每个图像加载到内存中,并执行两种不同的处理。第一种处理是简单的二值化,使用 ScanFix Binarize() 方法,将最小和最大阈值分别设置为 128 和 255。然后使用 SmartZone 处理图像,并将生成的文本存储起来进行比较。

第二种处理使用 ScanFix Image Detergent 方法清理图像背景颜色。Image Detergent 对象被设置为清理四种颜色,对应于纯白色以及使用行业标准实用程序估算的蓝色、粉红色和黄色页面的平均背景颜色。选择此方法是为了简单,并且因为它比 AutoImage Detergent() 方法提供了更大的半径控制。每种颜色的半径大约是该颜色到其最近邻居距离的一半,以防止重叠的清理区域。

这是清理操作的示意图,显示了频谱的影响区域

image003.png

图 2 处理前后的频谱图,显示了颜色空间中被清理的区域。

Image Detergent 操作完成后,使用与第一种处理相同的设置对图像进行二值化。

测试结果

通过提供更清晰的输入,二值化过程产生了更高质量的输出,当使用 SmartZone 读取图像时,这提高了识别率。

OCR 影响

image004.jpg

图 3 仅二值化(左)与 Image Detergent 后二值化(右)的对比。字符的细小区域对二值化过程造成了困难,但经过清理的图像产生的断裂字符更少。

通过比较每个过程的输出,并计算正确匹配的字符数,减去因删除、添加或误读的字符数,来计算 Image Detergent 过程的 OCR 影响。总体而言,使用 Image Detergent 操作的 14 磅文本的识别率比不使用它的情况高 2%,12 磅文本高 5%。虽然 2% 的增长看起来很小,但对于 14 磅文本,它相当于 95% 或更高的准确率下读取的文本块数量增加了 63%。对于 12 磅文本,它对应于 80% 或更高的准确率下读取的文本块数量增加了 21%。这种变化的原因是噪声的减少以及背景和前景颜色之间相对对比度的增加。

与标准平滑算法的比较

image005.png

图 4 原始图像与使用 3x3 平均滤镜和 Image Detergent 滤镜处理后的图像的 OCR 结果比较。

然而,与其他平滑算法相比,结果截然不同。将 Image Detergent 滤镜替换为标准平滑滤镜(3x3 像素平均滤镜)也减少了背景噪声,但对文档中字符的机器可读性造成了巨大损失。使用 Image Detergent 的平均可读性为 93%,而使用平均滤镜则降至 41%。原因是,虽然平滑可以使背景颜色均匀,但它也显着降低了字符的锐度。正如图 4 和图 5 所示,这种锐度下降导致二值化图像的性能急剧下降。

image006.png

图 5 Image Detergent(顶部)与 3x3 像素平均滤镜(底部)的对比。两者都清理了背景,但模糊的文本由于与背景对比度大大降低,因此更难二值化。

image007.png

图 6 JPEG 压缩会降低边缘图像的 OCR 准确性,但使用 Image Detergent 可以恢复很大一部分丢失的准确性。

如图 6 所示,当测试图像以 50% 质量的 JPEG 图像进行压缩时,如预期,有和没有 Image Detergent 的图像的 OCR 质量都有所下降。然而,非 Image Detergent 图像的性能下降得更厉害;当使用 JPEG 压缩时,14 磅文本的识别率下降了 12%,12 磅文本下降了 13%。当 Image Detergent 应用于 JPEG 图像(解压缩后,OCR 前)时,它显著减少了 JPEG 伪影的负面影响,将影响降低了高达 70%,分别降至 7% 和 9%。图 7 展示了 JPEG 压缩算法产生的伪影,以及 Image Detergent 如何消除图像中的许多这些伪影。

image008.jpg

图 7 原始图像(顶部)、50% 质量 JPEG(中部)和清理后的 JPEG(底部)。JPEG 压缩实际上在一定程度上清理了背景,因为有损压缩算法会丢弃高频数据,但它也会产生伪影形式的噪声,表现为字符周围的斑点和亮度变化。Image Detergent 有助于清理这些伪影。

降低输出文件大小的假设

噪声虽然不希望出现,但仍然是数据,并且可能对压缩图像格式的文件大小产生重大影响。在压缩图像之前去除图像中的噪声可以减小文件大小,在某些情况下会非常显著。

方法

对于文件大小比较,每个图像都使用与 OCR 测试相同的设置,并使用 Image Detergent 进行清理,然后将结果以无损格式存储。然后使用两种格式(一种有损和一种无损)压缩原始图像和清理后的图像。有损格式使用 JPEG,质量设置为 50%,与独立 JPEG 组织(Independent JPEG Group)的参考实现相当。无损格式使用带 LZW 压缩的 TIFF。

数据集

使用的图像与 OCR 测试中使用的图像相同。每张图像都使用有损和无损格式进行压缩,并比较压缩后的原始图像和清理后图像的文件大小以计算差异。差异如图 8 所示,表示为原始文件大小的百分比。值为 90 表示压缩后的 Image Detergent 文件大小为压缩后原始文件大小的 90%。

测试结果

image009.jpg

图 8 使用 Image Detergent 时的文件大小百分比减小。在所有情况下,压缩后的文件大小都减小了。粉红色和蓝色纸张的变化最为显著,因为它们原始图像中的噪声最多。

当比较使用 50% 质量 JPEG 压缩的有损格式的原始图像和清理后图像的大小,清理后图像平均文件大小减小了 10%。对于无损压缩,例如 LZW 压缩的 TIFF,变化要大得多,平均减少了 62%(尽管 LZW 文件仍然比 JPEG 文件大很多)。

压缩文件大小的减少在具有强烈彩色背景的图像上最为明显,这些图像在原始图像中噪声最多。对于这些图像,使用 LZW 实现了 70% 到 90% 的压缩改进。在 JPEG 测试中,蓝色纸张表现出最大的改进,压缩文件大小减少了 20%。

结论

传统的彩色平滑滤镜最好用于传统的彩色图像。对于文档图像,需要采用不同的方法,而 ScanFix Xpress v6 工具包提供了您所需的工具。Image Detergent 只是提供的众多功能之一,用于帮助处理彩色文档特有的问题。其他功能包括彩色倾斜校正和裁剪、Color Drop 和 Virtual Bulb 等颜色去除技术、用于排序和分割图像的 Color Detect、自动亮度与对比度调整,以及各种传统的彩色图像滤镜,用于平滑和锐化等任务。

本文表明,使用 Accusoft Pegasus 的 ScanFix Xpress v6 SDK 将 Image Detergent 应用于彩色图像,与标准的成像行业实践(平滑滤镜)相比,可以减小图像存档的文件大小,并提高 OCR 识别的准确性。

在此处查找 ScanFix Xpress SDK 图像增强功能的完整列表,并下载演示应用程序或试用版 ScanFix Xpress SDK 此处

下一节提供了可用于使用您自己的样本图像进行测试的代码示例。请从 www.accusoft.com 下载 SmartZone 和 ScanFix Xpress SDK 以执行示例代码。

请通过 sales@accusoft.com 或 support@accusoft.com 联系我们获取更多信息。

源代码示例

本节演示如何结合使用 ScanFix、ImagXpress 和 SmartZone 来加载、清理和 OCR 文档图像。本文使用此代码生成了白皮书中使用的数据。

/*
 *     This is a simple C# command line appliation that accepts an image filename
 *     as a command line argument, and generates a cleaned color image, a binarized
 *     image, and a text file containing the ASCII results of the OCR operation.
 */
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Here, instnaces of the three components used in this sample are created
            PegasusImaging.WinForms.SmartZone2.SmartZone smartzone =
                new PegasusImaging.WinForms.SmartZone2.SmartZone();
            Accusoft.ScanFixXpressSdk.ScanFix scanfix =
                     new Accusoft.ScanFixXpressSdk.ScanFix();
     Accusoft.ImagXpressSdk.ImagXpress imgX = new Accusoft.ImagXpressSdk.ImagXpress();
 
            /*
             * Here you will need to set up the component licenses, if you have them;
             * if not, then the program will run, but will display dialog boxes asking
             * you to register the products.
            */
 
            // create ImagXpress image object, so that we can use it to load and save
            // the image data
            Accusoft.ImagXpressSdk.ImageX image;
 
            // load the file into the image object
            image = Accusoft.ImagXpressSdk.ImageX.FromFile(imgX, args[0]);
 
            // load image into ScanFix
            scanfix.FromHdib(image.ToHdib(true));
 
            // set up the Image Detergent options structure, so we can specify the colors 
            // we wish to clean; in the test set, these colors are white, pink, blue, 
            // and yellow
            Accusoft.ScanFixXpressSdk.ImageDetergentOptions idoptions =
                     new Accusoft.ScanFixXpressSdk.ImageDetergentOptions();
 
            // add blue
            idoptions.ColorRadiusList.Add(new Accusoft.ScanFixXpressSdk.ColorRadius(
                     System.Drawing.Color.FromArgb(0x00b0f0f8), 50, false));
            // add pink
            idoptions.ColorRadiusList.Add(new Accusoft.ScanFixXpressSdk.ColorRadius(
                     System.Drawing.Color.FromArgb(0x00f8c8d8), 37, false));
            // add yellow
            idoptions.ColorRadiusList.Add(new Accusoft.ScanFixXpressSdk.ColorRadius(
                     System.Drawing.Color.FromArgb(0x00f8f8c8), 25, false));
            // add white
            idoptions.ColorRadiusList.Add(new Accusoft.ScanFixXpressSdk.ColorRadius(
                     System.Drawing.Color.FromArgb(0x00ffffff), 20, false));
 
            // clean the image with the given ImageDetergent settings
            scanfix.ImageDetergent(idoptions);
 
            // this gets access to the image in ScanFix, without giving up control
            image = Accusoft.ImagXpressSdk.ImageX.FromHdib(imgX,
                     scanfix.ToHdib(false));
 
            // save the cleaned image so we can examine it
            image.Save(args[0] + "_cleaned");
 
            // set up simple thresholding
            Accusoft.ScanFixXpressSdk.BinarizeOptions binopts =
                     new Accusoft.ScanFixXpressSdk.BinarizeOptions();
            binopts.HighThreshold = 255;
            binopts.LowThreshold = 128;
 
            // binarize the image
            scanfix.Binarize(binopts);
 
            // this gets access to the image in ScanFix, without giving up control
            image = Accusoft.ImagXpressSdk.ImageX.FromHdib(imgX,
                     scanfix.ToHdib(false));
 
            // save the thresholded image so we can examine it
            image.Save(args[0] + "_thresholded");
 
            // set up OCR recognition zone to the full page, letter size at 150 dpi
            System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0,
                (int)(8.5 * 150), 11 * 150);
            smartzone.Reader.Area = rect;
 
            // recognize the zone, and get the results
            PegasusImaging.WinForms.SmartZone2.TextBlockResult blockresult;
            blockresult = smartzone.Reader.AnalyzeField(scanfix.ToHdib(true));
 
            // save the output to a text file for analysis
            if (blockresult.NumberTextLines > 0)
            {
                // save the page text to a file
                System.Console.Out.WriteLine(blockresult.Text);             
                System.IO.TextWriter outfile = new System.IO.StreamWriter(args[0]  + ".txt");
                outfile.WriteLine(blockresult.Text);
                outfile.Close();
            }
            else
            {
                // note that no text was found for the given image
                System.Console.Out.WriteLine("No text was recognized");
                System.IO.TextWriter outfile = new System.IO.StreamWriter(args[0] + ".txt");
                outfile.WriteLine("No text recognized");
                outfile.Close();
            }
 
        }
    }
}
© . All rights reserved.