Autonomous
Autonomous

Reputation: 9075

Principal direction in a binary image

As shown in image, there is a binary polygonal image. I want to find the principal direction in the image with respect to X-axis. I have shown the principal direction and X-axis with blue line. This can be done using PCA but my problem is such a small rectangle will have around 1000 pixels and I have to find Principal directions for around 100 polygons (polygon can be of arbitrary shape).

One approach that I have thought is: Project that rectangle onto a line which is oriented at degrees at an interval (say) 5 degrees. The projection which has the maximum variance is the desired projection axis, and thus that is the desired angle. But this also falls under a greedy approach and thus will take time. Is there a smarter approach?

Also, if anybody could explain the exact procedure to do this using PCA, it would be helpful. I know the steps: 1. Take the covariance matrix. 2. Get the top eigenvector corresponding to largest eigenvalue -> that will be the principal direction.

But I am confused in the following statement which I often read everywhere:

A column vector: [0.5 0.5] is the first principal component and it gives the direction of the maximum variance. So can do I exactly calculate the angle by which I should rotate the data so that it will become parallel to X-axis.

enter image description here

Upvotes: 0

Views: 2892

Answers (1)

carlosdc
carlosdc

Reputation: 12152

Compute the eigenvector associated with the highest eigen value. Call that v. Normalize v. v = v/norm(v);

Compute angle between that and the horizontal direction: angle=acos(sum(v.*[1,0]))

Rotate by -angle, transformation matrix T = [cos(-angle) -sin(-angle); sin(-angle) cos(-angle)], multiply all points by that matrix. Do that for all polygons.

Upvotes: 2

Related Questions