srinath
srinath

Reputation: 41

How to find normals to an edge in an image

I am doing some work related to eye images. I did edge detection to it. The edge is like a curve and not continuous. I have to assume it to be continuous and find normals to that curve. How do I find the normals to it using MATLAB?

you can see the image below.

Edge image

I want to find the normals to the upper curve. I hope that I was clear enough.

Upvotes: 4

Views: 3984

Answers (3)

denver
denver

Reputation: 3135

As Zaphod recommended the normal is perpendicular to the edge. You don't need to do curve fitting, you can use back projection to identify the focal point of the curve.

Start at each edge point along the curve and draw a line from curve in the direction of the normal. Draw the line by incrementing the value of each pixel the line passes through. Once you do this for all the edges you would hope to find two pixels with higher values then the rest, one for each of your curves. You should then know by there locations which is the focal point for each curve.

Upvotes: 0

Zaphod
Zaphod

Reputation: 1927

Even though it seems unintuitive, the edge direction at every pixel is a pretty good estimate of the normal. This would be the simplest solution, because it doesn't involve any curve fitting.

In MATLAB, you can find pixel-wise edge directions using the Sobel filter:

[BW,thresh,gv,gh] = edge(I,'sobel');
edgeDir = atan2(gv, gh);

This gives you the edge directions as angles in radians.

Upvotes: 2

BioSP
BioSP

Reputation: 518

You may want to consider curve fitting (MSE based or some other criteria) to the data. I believe a second order will do good for the upper curve, and once you have a model you can can calculate the tangent and normal at each point.

Upvotes: 1

Related Questions