用于跟踪3D图像上的脊的路径的算法

时间:2010-11-11 17:11:45

标签: algorithm image-processing

我正在尝试找到一种算法(或算法思路),用于跟踪3D图像上的脊,这是从数字高程模型(DEM)派生出来的。我已经设法得到非常基本的程序工作,它只是在图像的每一行上迭代标记一条脊线,无论它在哪里发现方面的大变化(即从<180度到> 180度)。

然而,这产生的线条并不精彩,通常存在间隙和各种奇怪的人工制品。我希望通过使用某种算法来跟踪脊线来尝试扩展它,从而产生完整的线条(即没有间隙)并且更准确。

很多人都向我提到了蛇算法,但它们似乎并不是我想要的。我也做了很多关于路径寻找算法的搜索,但同样,它们似乎并不是正确的。

有没有人对我应该看的类型或算法或特定算法有任何建议?

更新:我被要求在我将要应用的确切区域上添加更多细节。它正在处理沙丘的网格高程数据。如果这些沙丘看起来类似于排水盆地之间的边界,我试图提取波峰,但可能会更加复杂(例如,可能有多个沙丘非常接近,逐渐融合波峰)< / p>

4 个答案:

答案 0 :(得分:2)

使用曲率的符号变化可以很好地估计脊。请注意,平坦区域的曲率将接近无穷大。因此,脊检测算法的伪代码可能是:

for each face in the mesh
   compute 1/curvature
   if abs(1/curvature) != zeroTolerance 
     flag face as ridge
   else
     continue

(zeroTolerance是一个接近但不等于零的数字,例如0.003等)

同样Meshlab为普通&amp;提供了一个模块。大多数格式的曲率估计。在编写代码之前,您可以使用它来测试这个想法。

答案 1 :(得分:1)

我不知道您的数据是什么样的,或者您需要多少自动化。如果由没有明显脊的山峰组成(但那么你可能不会问这个问题),这将无法工作。)

startPoint = highest point in DEM (or on ridge)
curPoint = startPoint;
line += curPoint;
Loop
    curPoint = highest point adjacent to curPoint not in line; // (Don't backtrack)
    line += point;
Repeat

好奇真正的解决方案是什么。

编辑添加:根据数据集的粗糙度,“点”可以是点的局部区域的单点或平滑平均值。

答案 2 :(得分:1)

答案 3 :(得分:1)

您可以像使用灰度颜色一样处理高程,然后使用2D边缘识别过滤器。有许多边缘识别方法可供使用。最好的将取决于您的具体需求。