如何查找图像边缘的法线

时间:2013-04-18 06:52:44

标签: matlab image-processing edge-detection

我正在做一些与眼睛图像有关的工作。   我做了边缘检测。边缘就像一条曲线而不是连续的。我必须假设它是连续的并找到该曲线的法线。如何使用MATLAB找到它的法线?

你可以看到下面的图片。

Edge image

我想找到上曲线的法线。 我希望我足够清楚。

3 个答案:

答案 0 :(得分:2)

即使看起来不直观,每个像素的边缘方向也是对法线的非常好的估计。这将是最简单的解决方案,因为它不涉及任何曲线拟合。

在MATLAB中,您可以使用Sobel滤波器找到逐像素的边缘方向:

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

这为您提供了以弧度为单位的边缘方向。

答案 1 :(得分:1)

您可能需要考虑对数据进行曲线拟合(基于MSE或其他一些标准)。我相信第二个订单对上面的曲线有好处,一旦你有一个模型,你就可以计算每个点的正切和法线。

答案 2 :(得分:0)

正如Zaphod所建议的那样,法线垂直于边缘。您不需要进行曲线拟合,可以使用反投影来识别曲线的焦点。

从沿曲线的每个边缘点开始,并沿法线方向从曲线绘制一条直线。通过递增线穿过的每个像素的值来绘制线条。对所有边缘执行此操作后,您希望找到两个像素值高于其余值的像素,其中一个像素用于每条曲线。然后你应该知道哪个位置是每条曲线的焦点。