C#将TIFF JPEG压缩转换为TIFF压缩CCITT4会产生大量噪声

C#将TIFF JPEG压缩转换为TIFF压缩CCITT4会产生大量噪声,c#,compression,noise,C#,Compression,Noise,对于OCR引擎,我需要向OCR引擎提供带有CCITT4压缩的TIFF文件。 我们的扫描仪输出带有JPEG压缩的TIFF文件。我想使用System.Drawing.Imaging用C#转换这些文件 这会导致图像带有大量噪声。我怎样才能减少噪音 我的代码: List<byte[]> fRet = new List<byte[]>(); ImageCodecInfo fImageCodecInfo = GetEncoderInfo("image/

对于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;
List fRet=new List();
ImageCodecInfo-fImageCodecInfo=GetEncoderInfo(“图像/tiff”);
编码器参数fEncoderParameters=新编码器参数(3);
fEncoderParameters.Param[0]=新编码器参数(System.Drawing.Imaging.Encoder.Compression,(long)EncoderValue.CompressionCCIT4);
fEncoderParameters.Param[1]=新编码器参数(System.Drawing.Imaging.Encoder.ScanMethod,(int)EncoderValue.ScanMethodNon interlaced);
fEncoderParameters.Param[2]=新编码器参数(System.Drawing.Imaging.Encoder.RenderMethod,(int)EncoderValue.RenderNonProgressive);
//
Image fOrgTiff=Image.FromStream(pInputTiff);
Guid objGuid=fOrgTiff.FrameDimensionsList[0];
FrameDimension objDimension=新的FrameDimension(objGuid);
int frameCount=forgiff.GetFrameCount(objDimension);
对于(int i=0;i
如前所述,Ccitt4是一种二进制格式(黑色/白色),因此您的图像会自动进行二值化。 文件上说:“


您可以尝试通过选择更好的二值化阈值来减少噪声。您可以查看开放源代码图像库(如或)提供的算法。

原始JPEG是有噪声的还是转换过程中引入的噪声?一个简单的中值滤波器可能会做得很好。我猜你会得到一个从JPEG转换成二进制图像格式的扩散算法。您需要一个阈值或分割算法。张贴编码器的所有可能参数。