我正在从事与眼部图像相关的工作。
我已经对它进行了边缘检测。边缘像一条曲线,不连续。我必须假定它是连续的,并找到该曲线的法线。如何使用MATLAB找到其法线?
您可以在下面看到图像。
我想要找到上曲线的法线。 希望我表述清楚了。
您可以在下面看到图像。
我想要找到上曲线的法线。 希望我表述清楚了。
尽管看起来不直观,但每个像素的边缘方向是法线的非常好的估计。这将是最简单的解决方案,因为它不涉及任何曲线拟合。
在MATLAB中,您可以使用Sobel滤波器找到逐像素的边缘方向:
[BW,thresh,gv,gh] = edge(I,'sobel');
edgeDir = atan2(gv, gh);
这会将边缘方向作为弧度角返回。
您可能需要考虑对数据进行曲线拟合(基于MSE或其他标准)。我认为二阶曲线适用于上曲线,一旦您有了模型,就可以在每个点计算切线和法线。
正如Zaphod所建议的那样,法线垂直于边缘。您不需要进行曲线拟合,可以使用反向投影来识别曲线的焦点。
从曲线上的每个边缘点开始,在法线方向上绘制一条线。通过递增线穿过的每个像素的值来绘制该线。一旦您对所有边缘执行此操作,您希望找到两个像素比其他像素具有更高的值,一个用于每个曲线。然后,您应该根据它们的位置知道每个曲线的焦点是哪个。