網格最短路徑算法(Dijkstra & Fast Marching)


  Dijkstra算法是計算圖中節點之間最短路徑的經典算法,網上關於Dijkstra算法原理介紹比較多,這里不再多講。值得一提的是,當圖中節點之間的權重都為1時,Dijkstra算法就變化為一般意義上的廣度優先搜索算法(Breadth-first search algorithm)。

  Dijkstra算法流程如下:

Dijkstra算法流程

 

 

  在介紹Fast marching算法之前先提下Eikonal方程,Eikonal方程屬於非線性偏微分方程,可以認為是一種近似波動方程,它的形式如下:

  Eikonal方程解u(x)的物理含義是從源點x0以速度f(x)到達計算域Ω內x點所需要消耗的最短時間。當f(x) = 1的特殊情況下,方程解就代表計算域Ω內的距離場。

  [Sethian et al. 1999]提出的Fast marching算法是一種求解Eikonal方程的數值方法。下面首先以二維正交柵格(柵格間距為h)為例,將方程左邊的梯度項用一階近似代替后可以得到:

max(U – UA, U – UB, 0)2 + max(U – UC, U – UD, 0)2 = h2/f(x)2

  假設UA = min(UA, UB),UC = min(UC, UD),那么:

(U – UA)2 + (U – UC)2 = h2/f(x)2

  當||UA – UC || ≤ h/f(x)時,

  當||UA – UC || > h/f(x)時,U = min(UA, UC) + h/f(x)。

 

       Fast marching算法也可以用於計算三角網格上的測地距離。對於三角面片x1x2x,,因此,Eikonal方程可以近似變為如下二次方程:

(aTQa)U(x)2 + (2aTQb)U(x) + bTQb = 1/f(x)2

其中:a = [1;1],b = –[Ux1;Ux2],M = [x – x1; x – x2],Q = (MMT) –1。通過求解上式方程可以得到x點的測地距離。

  Fast marching算法流程如下:

Fast marching算法流程

 

 

  Dijkstra算法和Fast marching算法思想相似,不同之處在於Dijkstra算法利用節點之間的歐式距離進行更新,而Fast marching算法利用由Eikonal方程化簡得到的近似偏微分方程進行更新。

 本文為原創,轉載請注明出處:http://www.cnblogs.com/shushen

 

 

參考文獻:

[1] J. A. Sethian, A. Vladimirsky. Fast methods for the eikonal and related Hamilton-Jacobi equations on unstructured meshes. (1999). Proceedings of the National Academy of Sciences, 97(11), 5699-5703.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM