A Shape Finder using Corner-Harris and Heirarchical Clustering.
Prerequisite:
- Python 2.7.
- OpenCV Contributed version is needed to CornerHarris Corner detection.
- Other libs: Matplotlib, numpy, imutils.
How is this method different from other shape finders:
Generally, all shape finders will use number of arcs to determine the shape of an object.
But this method uses Corners of an object to determine it's shape.
Using this method we can find the length of the arcs, angles and more.
Okay, how it is done ?
Glad you asked, We can easily find corners using Corner-Harris method!
The issue is Corner-Harris is not very accurate in real time. If we give it a triangle, it should give only 3 corners.
Instead, it gives us 30-40 nearby points for each corner.
Now our task is convert this 120 points into 3 corners.
After some search and learnings from AI techniques, it's found that Heirarchical Clustering is the way to do it.
Two liner: It's a Machine Learning technique used to group bunch of points without giving any idea or mentioning number of groups required. Unlike traditional Clustering, we don't have to give to how many groups it should be seperated.
It is simply demonstrated here.
Those stars represent an individual group for each cluster.
Run this.
Supply Image:
For simplicity, we give it a image containg triangles.
We did some contour detection for selecting the triangle for a particular color.
In this case, we select Red one as our target triangle.
Find Corners:
Now apply Corner-Harris to find the corners in the contour.
We found some bunch of points in each corner, we will have find the actual corners from this by applying Heirarchical Clustering.
Once we apply HC, it is gonna look like this in graph:
That Star represents the center that it found for each cluster.
Visualization:
We got 3 corners, it is easy to determine it's shape and we can do more operations from other informations like below: