Image preprocessing

The accuracy and reliability of text recognition is highly dependent on the quality of the original image. Aspose.OCR offers a large number of fully automated and manual image processing filters that enhance an image before it is sent to the OCR engine.

Each preprocessing filter increases the image processing time. The approximate amount of additional time required for pre-processing (as a percentage of the minimum image processing pipeline) is listed in the Performance Impact column.

Filter Action Performance impact Usage scenarios
Skew correction Automatically straighten images aligned at a slight angle to the horizontal. 12% Skewed images
Rotation Manually rotate severely skewed images. 7.5% Rotated images
Noise removal Automatically remove dirt, spots, scratches, glare, unwanted gradients, and other noise from photos and scans. 175% extra time
38% more memory (1)
Photos
Old books
Newspapers
Postcards
Documents with stains and dirt
Contrast correction Automatically adjust the image contrast. 7.5% Photos
Old papers
Text on a background
Resizing Proportionally scale images up / down, or manually define the width and height of the image. up to 100% (2) Medication guides
Food labels
Full-sized photos from modern cameras and smartphones
Scanned images at very high DPI
Binarization Convert images to black and white automatically or manually adjust the criteria that determines whether a pixel is considered black or white. 0.9% Always used for text detection and most automatic image corrections
Conversion to grayscale Discard color information from images and leave only shades of gray. 0.5% Photos
Scanned ID cards
Full-color scans
Color inversion Swap image colors so that light areas appear dark and dark areas appear light. 0.25% White text on black background
Advertisements
Business cards
Screenshots
Dilation Increase the thickness of characters in an image by adding pixels to the edges of high-contrast objects, such as letters. 3.1% Receipts
Printouts with very thin font
Median filter Blur noisy images while preserving the edges of high-contrast objects like letters. 6.25% Photos taken in low light conditions
Poor quality printouts
Highly compressed JPEG’s

Chaining preprocessing filters

Multiple preprocessing filters can be applied to the same image to further improve the recognition quality. The filters are applied one by one in the order they are added to PreprocessingFilter object.

Note that each filter requires additional time and resources on the computer running the application. Do not add extra filters if you are satisfied with the recognition accuracy, especially when developing web applications.

PreprocessingFilter filters = new PreprocessingFilter();

Approximate increase of processing time: 0%

Image regions preprocessing

Most preprocessing filters can be applied to specific regions of an image. For example, you can invert a newspaper headline written in white on black, leaving the rest of the article unchanged.

Multiple preprocessing filters can be applied to different regions of the same image. If the regions intersect each other, filters are applied to the intersection in their chaining order in PreprocessingFilter object.

Applying preprocessing to intersecting regions

To apply a filter to an area, specify its top left corner along with width and height as Rectangle object. If the region is omitted, the filter is applied to the entire image.

AsposeOCR api = new AsposeOCR();
// Define image regions
Rectangle blackRectangle = new Rectangle(5, 161, 340, 113);
PreprocessingFilter filters = new PreprocessingFilter();
// (1) Invert black region
filters.add(PreprocessingFilter.Invert(blackRectangle));
// (2) Denoise entire image
filters.add(PreprocessingFilter.AutoDenoising());
// Save preprocessed image to file
BufferedImage imageRes = api.PreprocessImage("source.png", filters);
File outputSource = new File("result.png");
ImageIO.write(imageRes, "png", outputSource);

The following filters can be applied to regions:

Viewing preprocessed images

Aspose.OCR offers an easy way to access or save preprocessed images using PreprocessImage method of AsposeOCR class. This method returns a BufferedImage object that can be sent for recognition or saved to a file.

You can use this file to analyze the effectiveness of preprocessing filters, exclude unnecessary filters that consume resources without affecting the result, or show the result of preprocessing in the user interface.

AsposeOCR api = new AsposeOCR();
// Add noise removal filter
PreprocessingFilter filters = new PreprocessingFilter();
filters.add(PreprocessingFilter.AutoDenoising());
// Save preprocessed image to file
BufferedImage imageRes = api.PreprocessImage("source.png", filters);
File outputSource = new File("result.png");
ImageIO.write(imageRes, "png", outputSource);