Characteristic detection is a website of laptop imaginative and prescient that focuses on utilizing instruments to detect areas of curiosity in photos. A major side of most characteristic detection algorithms is that they don’t make use of machine studying below the hood, making the outcomes extra interpretable and even sooner in some circumstances.
Within the earlier two articles of this sequence, we checked out the most well-liked operators for detecting picture edges: Sobel, Scharr, Laplacian, together with the Gaussian used for picture smoothing. In some type or one other, these operators used under-the-hood picture derivatives and gradients, represented by convolutional kernels.
As with edges, in picture evaluation, one other kind of native area is commonly explored: corners. Corners seem extra hardly ever than edges and normally point out a change of border course of an object or the top of 1 object and the start of one other one. Corners are rarer to search out, and so they present extra beneficial info.
Instance
Think about you might be accumulating a 2D puzzle. What most individuals do originally is discover a piece with a picture half containing the border (edge) of an object. Why? As a result of this fashion, it’s simpler to determine adjoining items, for the reason that variety of items sharing an identical object edge is minimal.
We will go even additional and give attention to selecting not edges however corners — a area the place an object adjustments its edge course. These items are even rarer than simply edges and permit for a fair simpler seek for different adjoining fragments due to their distinctive type.
For instance, within the puzzle beneath, there are 6 edges (B2, B3, B4, D2, D3, and D4) and only one nook (C5). By selecting the nook from the beginning, it turns into simpler to localize its place as a result of it’s rarer than edges.

The aim of this text is to grasp how corners may be detected. To do this, we are going to perceive the small print of the Harris nook detection algorithm – one of many easiest and well-liked strategies developed in 1988.
Concept
Allow us to take three forms of areas: flat, edge, and nook. Now we have already proven the construction of those areas above. Our goal can be to grasp the distribution of gradients throughout these three circumstances.
Throughout our evaluation, we may even construct an ellipse that incorporates the vast majority of the plotted factors. As we are going to see, its type will present sturdy indications of the kind of area we’re coping with.
Flat area
A flat area is the only case. Often, your entire picture area has practically the identical depth values, making the gradient values throughout the X and Y axes minor and centered round 0.
By taking the gradient factors (Gₓ, Gᵧ) from the flat picture instance above, we are able to plot their distribution, which appears to be like like beneath:

We will now assemble an ellipse across the plotted factors having a middle at (0, 0). Then we are able to determine its two principal axes:
- The main axis alongside which the ellipse is maximally stretched.
- The minor axis alongside which the ellipse attains its minimal extent.
Within the case of the flat area, it may be tough to visually differentiate between the most important and minor axes, because the ellipse tends to have a round form, as in our scenario.
However, for every of the 2 principal axes, we are able to then calculate the ellipse radiuses λ₁ and λ₂. As proven within the image above, they’re nearly equal and have small relative values.
Edge area
For the sting area, the depth adjustments solely within the edge zone. Outdoors of the sting, the depth stays practically the identical. On condition that, many of the gradient factors are nonetheless centered round (0, 0).
Nevertheless, for a small half across the edge zone, gradient values can drastically change in each instructions. From the picture instance above, the sting is diagonal, and we are able to see adjustments in each instructions. Thus, the gradient distribution is skewed within the diagonal course as proven beneath:

For edge areas, the plotted ellipse is often skewed in the direction of one course and has very totally different radiuses λ₁ and λ₂.
Nook area
For corners, many of the depth values exterior the corners keep the identical; thus, the distribution for almost all of the factors remains to be situated close to the middle (0, 0).
If we take a look at the nook construction, we are able to roughly consider it as an intersection of two edges having two totally different instructions. For edges, we’ve already mentioned within the earlier part that the distribution goes in the identical course both in X or Y, or each instructions.
By having two edges for the nook, we find yourself with two totally different level spectrums rising in two totally different instructions from the middle. An instance is proven beneath.

Lastly, if we assemble an ellipse round that distribution, we are going to discover that it’s bigger than within the flat and edge circumstances. We will differentiate this end result by measuring λ₁ and λ₂, which on this state of affairs will take a lot bigger values.
Visualization
Now we have simply seen three situations during which λ took totally different values. To raised visualize outcomes, we are able to assemble a diagram beneath:

Method
To have the ability to classify a area into one in all three zones, a system beneath is often used to estimate the R coefficient:
R = λ₁ ⋅ λ₂ – okay ⋅ (λ₁ + λ₂)² , the place 0.04 ≤ okay ≤ 0.06
Primarily based on the R worth, we are able to classify the picture area:
- R < 0 – edge area
- R ~ 0 – flat area
- R > 0 – nook area
OpenCV
Harris Nook detection may be simply applied in OpenCV utilizing the cv2.CornerHarris perform. Let’s see within the instance beneath how it may be performed.
Right here is the enter picture with which we can be working:

First, allow us to import the required libraries.
import numpy as np
import cv2
import matplotlib.pyplot as plt
We’re going to convert the enter picture to grayscale format, because the Harris detector works with pixel intensities. It’s also essential to convert the picture format to float32, as computed values related to pixels can exceed the bounds [0, 255].
path = 'knowledge/enter/shapes.png'
picture = cv2.imread(path)
grayscale_image = cv2.cvtColor(picture, cv2.COLOR_BGR2GRAY)
grayscale_image = np.float32(grayscale_image)
Now we are able to apply the Harris filter. The cv2.cornerHarris perform takes 4 parameters:
- grayscale_image – enter grayscale picture within the float32 format.
- blockSize (= 2) – defines the scale of the pixel block within the neighborhood of the goal pixel thought of for nook detection.
- ksize (= 3) – the dimension of the Sobel filter used to calculate derivatives.
- okay (= 0.04) – coefficient within the system used to compute the worth of R.
R = cv2.cornerHarris(grayscale_image, 2, 3, 0.04)
R = cv2.dilate(R, None)
The cv2.cornerHarris perform returns a matrix of the precise dimensions as the unique grayscale picture. Its values may be properly exterior the conventional vary [0, 255]. For each pixel, that matrix incorporates the R coefficient worth we checked out above.
The cv2.dilate is a morphological operator that may optionally be used instantly after to raised visually group the native corners.
A typical method is to outline a threshold beneath which pixels are thought of corners. As an example, we are able to think about all picture pixels as corners whose R worth is larger than the maximal world R worth divided by 100. In our instance, we assign such pixels to pink shade (0, 0, 255).
To visualise a picture, we have to convert it to RGB format.
picture[R > 0.01 * R.max()] = [0, 0, 255]
image_rgb = cv2.cvtColor(picture, cv2.COLOR_BGR2RGB)
Lastly, we use maplotlib to show the output picture.
plt.determine(figsize=(10, 8))
plt.imshow(image_rgb)
plt.title('Harris Nook Detection')
plt.axis('off')
plt.tight_layout()
plt.present()
Right here is the end result:

Conclusion
On this article, we’ve examined a strong technique for figuring out whether or not a picture area is a nook. The offered system for estimating the R coefficient works properly within the overwhelming majority of circumstances.
In actual life, there’s a widespread have to run an edge classifier for a whole picture. Setting up an ellipse across the gradient factors and estimating the R coefficient every time is resource-intensive, so extra superior optimization methods are used to hurry up the method. However, they’re based mostly so much on the instinct we studied right here.
Sources
All photos except in any other case famous are by the writer.
