2017-05-11 84 views
0

나는 현재 OCR 프로그램을 사용하고 있습니다. 나는 tesseract를 사용하고 있으며, 감지 된 문자의 품질을 향상시키기 위해 이미지를 왜곡 보정해야합니다. 문제는 tesseract가 제공 한 디스 큐 (deskew) 속성이 충분한 매력적인 결과를 생성하지 않는다는 것입니다. 그래서 저는 AForge와 Atalasoft로 이미지의 기울기를 줄이려고했으나 매번 어떤 이미지가 필요한 형식이 아니 었습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 아니면 더 나은 해결책이 있습니까?C# 이미지 왜곡 보정 방법

이 AForge 구현

 System.Drawing.Bitmap imageToBitmap = AForge.Imaging.Image.FromFile(imagePath); 
     Console.WriteLine("before " + imageToBitmap.PixelFormat); 
     System.Drawing.Bitmap NewPicture = imageToBitmap.Clone(new System.Drawing.Rectangle(0, 0, imageToBitmap.Width, imageToBitmap.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb); 
     var dop = AForge.Imaging.Image.Clone(imageToBitmap, System.Drawing.Imaging.PixelFormat.Format24bppRgb); 
     Console.WriteLine("after " + dop.PixelFormat); 

     AForge.Imaging.DocumentSkewChecker skewChecker = new AForge.Imaging.DocumentSkewChecker(); 
     // get documents skew angle 
     double angle = skewChecker.GetSkewAngle(dop); 
     // create rotation filter 
     AForge.Imaging.Filters.RotateBilinear rotationFilter = new AForge.Imaging.Filters.RotateBilinear(-angle); 
     rotationFilter.FillColor = System.Drawing.Color.White; 
     // rotate image applying the filter 
     System.Drawing.Bitmap rotatedImage = rotationFilter.Apply(imageToBitmap); 

     rotatedImage.Save("deskewedImage"); 

이는 것은 작동하지 않는 이유를 마침내 이해하기 위해 관리 Atalasoft 구현

 AtalaImage img = new AtalaImage(imagePath); 
     AutoDeskewCommand cmd = new AutoDeskewCommand(); 
     AtalaImage resultImage = cmd.Apply(img).Image; 
     resultImage.Save("result.tif", new TiffEncoder(), null); 
+0

가능한 복제본 [D 이진 이미지의 e-skew 문자] (http://stackoverflow.com/questions/30273251/de-skew-characters-in-binary-image) – Spektre

답변

0

입니다 : 이미지가 Format8bppIndexed 또는 방법 skewChecker로 변환해야합니다. GetSkewAngle (image) 예외가 throw됩니다.

 Bitmap tempImage = AForge.Imaging.Image.FromFile(imagePath); 
     Bitmap image; 
     if (tempImage.PixelFormat.ToString().Equals("Format8bppIndexed")) 
     { 
      image = tempImage; 
     } 
     else 
     { 
      image = AForge.Imaging.Filters.Grayscale.CommonAlgorithms.BT709.Apply(tempImage); 
     } 

     tempImage.Dispose(); 

     AForge.Imaging.DocumentSkewChecker skewChecker = new AForge.Imaging.DocumentSkewChecker(); 
     // get documents skew angle 
     double angle = skewChecker.GetSkewAngle(image); 
     // create rotation filter 
     AForge.Imaging.Filters.RotateBilinear rotationFilter = new AForge.Imaging.Filters.RotateBilinear(-angle); 
     rotationFilter.FillColor = Color.Black; 
     // rotate image applying the filter 
     Bitmap rotatedImage = rotationFilter.Apply(image); 

     var deskewedImagePath = folderSavePath + filename + "_deskewed.tiff"; 
     rotatedImage.Save(deskewedImagePath, System.Drawing.Imaging.ImageFormat.Tiff); 

     image.Dispose(); 
     rotatedImage.Dispose();