Guide to using IronOCR Filters
IronOCR provides the tools you need to read images that may need preprocessing in the form of filters. You can choose from a wide array of filters that can manipulate your images to become processable.
Get started with IronOCR
Start using IronOCR in your project today with a free trial.
List of OCR Image Filters
The following Image filters can really improve performance:
Filters to change the Image Orientation
Rotate
- Rotates images by a number of degrees clockwise. For anti-clockwise, use negative numbers.Deskew
- Rotates an image so it is the right way up and orthogonal. This is very useful for OCR because Tesseract's tolerance for skewed scans can be as low as 5 degrees.Scale
- Scales OCR input pages proportionally.
Filters to manipulate Image Colors
Binarize
- This image filter turns every pixel black or white with no middle ground. This may improve OCR performance in cases of very low text-to-background contrast.ToGrayScale
- This image filter turns every pixel into shades of gray. Unlikely to improve OCR accuracy but may improve speed.Invert
- Inverts every color. E.g. White becomes black and vice versa.ReplaceColor
- Replaces a color in an image with another color, within a certain threshold.
Filters to improve Contrast in an Image
Contrast
- Increases contrast automatically. This filter often improves OCR speed and accuracy in low-contrast scans.Dilate
- Advanced Morphology. Dilation adds pixels to the boundaries of objects in an image. Opposite of Erode.Erode
- Advanced Morphology. Erosion removes pixels from object boundaries. Opposite of Dilate.
Filters to reduce Image Noise
Sharpen
- Sharpens blurred OCR Documents and flattens alpha channels to white.DeNoise
- Removes digital noise. This filter should only be used in scenarios where noise is expected.DeepCleanBackgroundNoise
- Heavy background noise removal. Only use this filter if extreme document background noise is known, as it might reduce OCR accuracy of clean documents and is CPU intensive.EnhanceResolution
- Enhances the resolution of low-quality images. This filter is not often needed becauseOcrInput.MinimumDPI
andOcrInput.TargetDPI
will automatically catch and resolve low-resolution inputs.
Filter Example and Usage
In the following example, we demonstrate how to apply filters within your code.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-1.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("my_image.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("my_image.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Debug Filter / What is the filter doing?
If you are having difficulty with reading images or barcodes within your program, there is a way to save an image of a filtered result. This way, you can debug and see exactly what each filter does and how it is manipulating your image.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-2.cs
using IronOcr;
using System;
var file = "skewed_image.tiff";
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(file, pageindices);
// Here we apply the filter: Deskew
input.Deskew();
// Save the input with filter(s) applied
input.SaveAsImages("my_deskewed");
// We read, then print the text to the console
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private file = "skewed_image.tiff"
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames(file, pageindices)
' Here we apply the filter: Deskew
input.Deskew()
' Save the input with filter(s) applied
input.SaveAsImages("my_deskewed")
' We read, then print the text to the console
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Filter Use Cases
Rotate
Filter Explanation
Rotate is a filter used to manually set a known rotation to an image to get it closest to being straight. IronOCR has functionality to run Deskew()
, however, the degree of tolerance for this is rather narrow and is best used for images that are almost perfectly straight (within 15 degrees or so). For input images that are 90 degrees off, or upside down, we should call Rotate()
.
Use-Case Code Example
This is an example of calling Rotate to correct an upside-down image:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-3.cs
using IronOcr;
using System;
var image = "screenshot.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Rotate 180 degrees because image is upside-down
input.Rotate(180);
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "screenshot.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Rotate 180 degrees because image is upside-down
input.Rotate(180)
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Before Input.Rotate(180)`` | After Input.Rotate(180)`` |
---|---|
![]() | ![]() |
Deskew
Filter Explanation
Uses a Hough Transform to attempt to straighten an image within certain degrees of tolerance. This is important for images that are not completely straight because a tilted document may result in a misread.
Use-Case Code Example
This is an example of calling Deskew to correct a skewed image:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-4.cs
using IronOcr;
using System;
var image = @"paragraph_skewed.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply deskew with 15 degree snap
bool didDeskew = input.Deskew(15);
if (didDeskew)
{
// Read image into variable: result
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
else
{
Console.WriteLine("Deskew not applied because Image Orientation could not be determined.");
}
Imports IronOcr
Imports System
Private image = "paragraph_skewed.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply deskew with 15 degree snap
Dim didDeskew As Boolean = input.Deskew(15)
If didDeskew Then
' Read image into variable: result
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Else
Console.WriteLine("Deskew not applied because Image Orientation could not be determined.")
End If
Before Deskew()`` | After Deskew()`` |
---|---|
![]() | ![]() |
Scale
Filter Explanation
Scale is a useful image manipulation filter that helps to resize an image using the pixels it already has. This can be used when a barcode is not being scanned because the image is only tens of pixels wide, with each bar as one pixel, or if text is too small with no anti-aliasing.
1000px x 1000px
where barcodes can be read well, which should be considered if your barcode is not being found.Use-Case Code Example
This is an example of calling Scale to enlarge the gaps between bars in a barcode for scanning:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-5.cs
using IronOcr;
using System;
var image = @"small_barcode.png";
var ocr = new IronTesseract();
// Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply scale
input.Scale(400); // 400% is 4 times larger
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "small_barcode.png"
Private ocr = New IronTesseract()
' Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = True
Dim input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply scale
input.Scale(400) ' 400% is 4 times larger
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Before Scale()`` | After Scale()`` |
---|---|
![]() | ![]() |
Binarize
Filter Explanation
The Binarize filter classifies all pixels in an image as either black or white, depending on an adaptive algorithm. This removes all colors and separates the background into a flat white, with anything recognized as text colored a full black for easy reading.
Use-Case Code Example
This is an example of calling Binarize to align colored text and remove background colors and noise:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-6.cs
using IronOcr;
using System;
var image = @"no-binarize.jpg";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply Binarize
input.Binarize();
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "no-binarize.jpg"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply Binarize
input.Binarize()
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Before Binarize()`` | After Binarize()`` |
---|---|
![]() | ![]() |
Invert
Filter Explanation
IronOCR reads best when the image is black text on a white background
. The Invert filter is used to achieve this by inverting all colors on an image.
Use-Case Code Example
This is an example of calling Invert to turn white on black into black on white:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-7.cs
using IronOcr;
using System;
var image = @"before-invert.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply Invert
input.Invert(true);
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "before-invert.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply Invert
input.Invert(True)
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Before | After |
---|---|
![]() | ![]() |
Frequently Asked Questions
How can image filters improve OCR accuracy in C#?
Image filters in IronOCR can preprocess images to enhance their quality, thus improving OCR accuracy. Filters like Binarize and Contrast increase readability by adjusting colors and contrast, while Rotate and Deskew correct image orientation.
What filters are available for correcting image orientation?
IronOCR provides Rotate and Deskew filters to correct image orientation issues. Rotate allows for manual adjustment of image angles, while Deskew automatically straightens slightly tilted images.
How does the Binarize filter affect image preprocessing?
The Binarize filter in IronOCR converts image pixels to black and white, which removes background colors and enhances text visibility, particularly improving OCR accuracy in low contrast conditions.
When is it appropriate to use noise reduction filters?
Noise reduction filters like Sharpen and DeNoise should be used when there's digital noise in images. These filters clean up the image, making text clearer for better OCR results in IronOCR.
Can enhancing image resolution affect OCR performance?
Yes, using the EnhanceResolution filter can improve OCR performance by increasing the resolution of low-quality images. Although IronOCR's default MinimumDPI and TargetDPI settings often suffice, the filter can provide additional resolution enhancement if needed.
What role do color manipulation filters play in OCR?
Color manipulation filters like Invert, ToGrayScale, and Binarize in IronOCR adjust image colors to boost text readability. Invert changes color schemes, ToGrayScale converts images to grayscale, and Binarize reduces images to black and white.
What is the difference between Contrast and Sharpen filters?
The Contrast filter in IronOCR increases the difference between light and dark areas, improving text clarity, while the Sharpen filter enhances edges to make text more distinct, both aiding in better OCR recognition.
How to save and debug filtered images in IronOCR?
To save and debug filtered images in IronOCR, use the SaveAsImages
function after applying filters. This helps visualize filter effects and ensures the preprocessing steps have improved image quality for OCR.
What are the advanced morphology filters available in IronOCR?
IronOCR offers advanced morphology filters like Dilate and Erode. Dilate adds pixels to object boundaries to enhance features, while Erode removes them, both used to clarify image details for improved OCR accuracy.