3

对于 OCR 引擎,我需要为 OCR 引擎提供带有 CCITT4 压缩的 TIFF 文件。我们的扫描仪输出带有 JPEG 压缩的 TIFF 文件。我想使用 System.Drawing.Imaging 用 C# 转换这些文件。

这会导致图像有很多噪点。我怎样才能减少噪音?

我的代码:

        List<byte[]> fRet = new List<byte[]>();
        ImageCodecInfo fImageCodecInfo = GetEncoderInfo("image/tiff");
        EncoderParameters fEncoderParameters = new EncoderParameters(3);
        fEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
        fEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int)EncoderValue.ScanMethodNonInterlaced);
        fEncoderParameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int)EncoderValue.RenderNonProgressive);

        //

        Image fOrgTiff = Image.FromStream(pInputTiff);
        Guid objGuid = fOrgTiff.FrameDimensionsList[0];
        FrameDimension objDimension = new FrameDimension(objGuid);
        int frameCount = fOrgTiff.GetFrameCount(objDimension);
        for (int i = 0; i < frameCount; i++)
        {
            MemoryStream ms = new MemoryStream();
            fOrgTiff.SelectActiveFrame(objDimension, i);
            fOrgTiff.Save(ms, fImageCodecInfo, fEncoderParameters);
            ms.Position = 0;
            fRet.Add(ms.GetBuffer());
        }
        return fRet;
4

1 回答 1

1

正如Brannon所说,Ccitt4 是一种二进制格式(黑白),因此您的图像会自动二进制化。文档说:“ Ccitt3、Ccitt4 和 Rle 要求将 PixelFormat 值设置为BlackWhite。将 PixelFormat 设置为任何其他值会将 Compression 属性值重置为 Default。

您可以尝试通过选择更好的二值化阈值来降低噪声。您可以查看AForge.NetEmguCV等开源成像库提供的算法。

于 2012-07-16T04:55:04.983 回答