C#将TIFF JPEG压缩转换为TIFF CompressionCCITT4会产生很多噪音

时间:2010-12-02 15:31:32

标签: c# compression noise

对于OCR引擎,我需要使用CCITT4压缩为TCR文件提供OCR引擎。 我们的扫描仪输出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;

1 个答案:

答案 0 :(得分:1)

正如Brannon所说,Ccitt4是二进制格式(黑/白),因此您的图像会自动进行二值化。 文档说:“The Ccitt3, Ccitt4, and Rle require that the PixelFormat value be set to BlackWhite. Setting the PixelFormat to any other value resets the Compression property value to Default.

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