【发布时间】:2014-10-26 20:07:18
【问题描述】:
我正在做一些与眼睛图像相关的工作。 我对它进行了边缘检测。边缘就像一条曲线而不是连续的。我必须假设它是连续的并找到该曲线的法线。如何使用 MATLAB 找到它的法线?
你可以看到下面的图片。
我想找到上曲线的法线。 我希望我已经足够清楚了。
【问题讨论】:
标签: matlab image-processing edge-detection
我正在做一些与眼睛图像相关的工作。 我对它进行了边缘检测。边缘就像一条曲线而不是连续的。我必须假设它是连续的并找到该曲线的法线。如何使用 MATLAB 找到它的法线?
你可以看到下面的图片。
我想找到上曲线的法线。 我希望我已经足够清楚了。
【问题讨论】:
标签: matlab image-processing edge-detection
尽管看起来不直观,但每个像素的边缘方向是对法线的一个很好的估计。这将是最简单的解决方案,因为它不涉及任何曲线拟合。
在 MATLAB 中,您可以使用 Sobel 滤波器找到逐像素的边缘方向:
[BW,thresh,gv,gh] = edge(I,'sobel');
edgeDir = atan2(gv, gh);
这会以弧度为单位为您提供边缘方向。
【讨论】:
您可能需要考虑对数据进行曲线拟合(基于 MSE 或其他一些标准)。我相信二阶对上曲线有好处,一旦你有了模型,你就可以计算每个点的切线和法线。
【讨论】:
正如赞福德建议的那样,法线垂直于边缘。不需要做曲线拟合,可以用反投影来识别曲线的焦点。
从曲线的每个边缘点开始,从曲线沿法线方向画一条线。通过增加线穿过的每个像素的值来绘制线。一旦对所有边缘执行此操作,您将希望找到两个像素值高于其余像素,一个用于您的每条曲线。然后,您应该知道每个曲线的焦点位置。
【讨论】: