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

我试图从3D数字高程模型(DEM)中找到一个算法(或算法思路),用于追踪3D图像上的脊线。 我已经设法实现了非常基本的程序工作,它只是遍历图像的每一行,在任何发现方面有较大变化(即从<180度到> 180度)的地方标记脊线。

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

有很多人向我提到了蛇算法,但他们似乎并不完全符合我的要求。 我还做了很多关于路径寻找算法的搜索,但是它们似乎并不是很正确。

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

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


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

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

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

Meshlab还为大多数格式的正态和曲率估计提供了一个模块。 在对代码进行编码之前,您可以使用它来测试这个想法。


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

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

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

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


http://en.wikipedia.org/wiki/Ridge_detection

链接地址: http://www.djcxy.com/p/79655.html

上一篇: Algorithm for following the path of ridges on a 3D image

下一篇: Digital numbers recognition with Opencv + OCR on android