如何在图像中找到边缘的法向量

4
我正在从事与眼部图像相关的工作。 我已经对它进行了边缘检测。边缘像一条曲线,不连续。我必须假定它是连续的,并找到该曲线的法线。如何使用MATLAB找到其法线?
您可以在下面看到图像。
我想要找到上曲线的法线。 希望我表述清楚了。
3个回答

2

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

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

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

这会将边缘方向作为弧度角返回。


感谢您的回答。通过上述过程,我可以在每个像素处获取edgeDir。如何仅针对上曲线(或下曲线)执行此操作?如何为曲线制定法线方程? - srinath
为了使一条线适应于任意边缘点的法线,首先计算边缘方向θ,然后计算斜率m = tan(theta)。取边缘像素坐标(x, y),解方程y = mx + c来计算常数c。这样你就得到了法线的方程。为了区分上下曲线,可能需要进行曲线拟合,并比较曲线焦点的y坐标。 - Zaphod
非常感谢!我明白了。能帮我做一下曲线拟合吗?我没有找到与图像相关的东西。这只是给出了几个点。如果你有任何链接,请发一下。 - srinath

1

您可能需要考虑对数据进行曲线拟合(基于MSE或其他标准)。我认为二阶曲线适用于上曲线,一旦您有了模型,就可以在每个点计算切线和法线。


请详细描述一下,如何只选择上曲线?我认为不能仅基于行范围进行选择,因为某些行存在两条曲线。 - srinath
你可以尝试几种方法。你可以将图像分成子图像并进行阈值。你可以尝试拟合一个二阶模型,它会在它们之间找到某种“中心”线,并选择该线上方的数字。 - BioSP
你能告诉我如何将圆弧拟合到它上面吗?我想对下曲线进行曲线拟合。我已经按照你说的方法将其隔离出来了。我想对其进行曲线拟合(圆形)。 - srinath

0

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

从曲线上的每个边缘点开始,在法线方向上绘制一条线。通过递增线穿过的每个像素的值来绘制该线。一旦您对所有边缘执行此操作,您希望找到两个像素比其他像素具有更高的值,一个用于每个曲线。然后,您应该根据它们的位置知道每个曲线的焦点是哪个。


我怎样能够沿着曲线遍历(上或下)呢?你能告诉我如何从编程角度来运行经过一条曲线以便画直线吗? - srinath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接