Image rotation – which seems trivial – has big implications in computer vision industry. The quality and even more so the speed at which a vision library can perform various types of rotation is vital to some industries. For example the rate at which a scanner can churn pages impacts greatly on its sales. That’s why Scantron, a global leader in scanning, uses CUVI for their line of products to self-align scanned documents at an insanely fast rate.

Image rotation can be of two broad types: cropping and non-cropping. Most image editing software uses cropping-based rotation (along with zoom) for image straighten purposes. Industries and data sensitive application, on the other hand, use non-cropping rotation.

Cropping Rotate

This type retains image dimensions while rotating the image about a point called anchor. Since the dimension of the original image is retained, it crops the image at some parts of the edge (hence the name) and adds blank regions to the other. The amount of crop and blank region depends on the angle of rotation. In cropping rotation, the anchor defines the pivot point for rotation. Most libraries default anchor at the center of the image or at the origin (0,0) of the image. CUVI provides the ability to choose any point of the image to act as an anchor point, the advantage of which I’ll explain later in this article. Moreover CUVI also provides the ability to choose ROI (region of interest) within an image to perform rotation specifically to that region. For usage detail of cropping rotation visit here.

Let’s go through the use-cases of this type of rotate and when it might get handy. The most basic rotate can be cropping rotate with center of the image as anchor. It’s usually followed by a crop or resize and is used to straighten a skew image where you can afford to lose image data at the edges.

cropping-rotate

Left (400×300): Original Image Right (400×300): Cropping Rotate, Anchor: Center of Image, Angle: 15.2

If there’s a critical data at one corner of the image, you can select that as the anchor point for rotation and still be able to fix the skew.

cropping-rotate-anchor

Left (400×300): Original Image Right (400×300): Cropping Rotate, Anchor: Top Left of Image, Angle: 15.2

The same can be applied to ROI based rotate. And ideal use-case would be an image where you’re only interested in aligning a specific portion of the image.

cropping-rotate-roi

Left (400×300): Original Image Right (400×300): Cropping Rotate with ROI, Anchor: Center of ROI, Angle: 15.2

cropping-rotate-roi-left

Left (400×300): Original Image Right (400×300): Cropping Rotate with ROI, Anchor: Top Left of ROI, Angle: 15.2

Non-Cropping Rotate:

As the name suggest this type of rotate preserves the data of original image. The catch is that the resultant image has a varying size depending upon the angle of rotation. This type of rotate usually also follows with a cropping function to get the desired results. The anchor point becomes irrelevant in this type of rotate since the original data of image stays preserved. See how to use this type of rotate in code, here.

rotate-without-crop

Left (400×300): Original Image Right (467×397): Non Cropping Rotate, Angle: 15.2

rotate-without-crop

Left (400×300): Original Image Right (303×401): Non Cropping Rotate, Angle: 90

CUVI over NPP

NPP is considered a library of primitive of primitives. With it, you get to taste the meal but not eat it. Rotate for example is limited to cropping rotate with center as the fixed pivot point. Up till today NPP lacks non-cropping rotate as well as freedom to select the pivot point in the image. Moreover, the edge anti-aliasing is not properly handled by NPP. Check the image below:

rotate-npp-vs-cuvi

Benchmark

An A4 sheet scanned at 300 DPI amounts to 2480 x 3508 pixels which is about 4k image. CUVI is capable of performing self aligning to those scanned sheets at about 1,500 sheets per second which make it anything but a bottleneck in the scanning pipeline.

rotate-speed

Try above and dozens of more features CUVI has to offer. You can visit the full list here and download the library from here.