Laplacian operator 介紹:一個算子如何看見曲率、擴散與邊界
你在影像上找邊緣、在網格上模擬熱傳導,或在圖上做平滑與分群時,背後很可能都遇到 Laplacian operator(拉普拉斯算子)。算子可以先理解成「把一個函數轉成另一個函數的規則」。
它的基本定義是:
在許多教材裡, 也是 的替代記號;這裡的 指 scalar Laplacian,不是把 Hessian 矩陣直接寫出來。更實用的讀法是:Laplacian 測量一個位置和周圍相比,有多不平衡。
山頂、碗底、平面,通常會給出不同符號;鞍點也可能讓各方向的二階變化互相抵消。把它放進熱方程,溫度會從高處流向低處;把它離散成像素或圖上的鄰接關係,又變成邊緣偵測與結構分析的工具。
這篇文章只追一條主線:Laplacian 是「局部鄰域差異的二階量」。連續函數、像素網格、一般圖共享這種鄰域比較結構,但尺度、權重、邊界與符號慣例並不完全相同。
1. 先從梯度開始:方向,再到不平衡
對純量場 取梯度(gradient),得到一個向量:
梯度回答:「往哪個方向走, 上升最快?」例如把 想成地形高度,梯度箭頭會從谷底指向山頂。
接著對這個向量場取散度(divergence)。散度回答:「這個位置看起來像流出的源頭,還是流入的匯?」梯度的散度就是 Laplacian:
例如 時,,所以 。這個小例子就是「先找每個方向的上升,再計算這些箭頭的淨流出」。
在二維笛卡兒座標中,它一般展開成:
三維則再加上 。也就是說,Laplacian 是 Hessian 的 trace,也就是各座標方向二階偏導數的總和;這個定義可參考 MathWorld 的 Laplacian 定義 與 LibreTexts 的 divergence 說明。
二階導數到底在看什麼?
一維先夠了。對曲線 而言:
- :曲線局部向上凹,該點低於左右鄰域的平均趨勢,但不單獨保證它是極小值。
- :曲線局部向下凹,該點高於左右鄰域的平均趨勢,但不單獨保證它是極大值。
- :沿著這個方向沒有淨的二階變化;它可能是直線,也可能只是拐點附近。
因此,Laplacian 不看高度或單一方向的斜率,而看各方向二階變化的總和。這也解釋了為什麼一個平面 的 Laplacian 是零:它有斜率,但沒有二階變化。
2. 最好用的直覺:和鄰居平均值比較
在均勻 Cartesian 網格的內部點上,Laplacian 可以近似成「鄰居總和減去中心點的加權版本」。以二維網格的五點 stencil(五點差分模板)為例,兩個方向等距、網格間距為 時:
把分子改寫一下,會更接近直覺:
所以:
- 中心點比四個鄰居平均值高,Laplacian 為負。
- 中心點比鄰居平均值低,Laplacian 為正。
- 中心點和鄰居平均值相同,Laplacian 接近零。
例如中心值是 、四個鄰居都是 ,則 ;如果四個鄰居的平均也是 ,結果就是 。連續公式看起來像微積分;離散公式則像一個很小的 local filter,每次只看上下左右四格。SciPy 的 LaplacianNd 文件 也把這類網格 Laplacian 視為離散線性算子。
import numpy as np
def laplacian_2d(field, spacing=1.0):
"""五點差分;邊界先保留為 NaN,避免假裝知道外部值。"""
result = np.full_like(field, np.nan, dtype=float)
h2 = spacing**2
result[1:-1, 1:-1] = (
field[:-2, 1:-1]
+ field[2:, 1:-1]
+ field[1:-1, :-2]
+ field[1:-1, 2:]
- 4 * field[1:-1, 1:-1]
) / h2
return result
程式裡最容易被忽略的不是那個 -4,而是邊界。下面這段 helper 只計算內部點,NaN 不是邊界條件的實作;若要解 PDE,仍需另外施加 Dirichlet condition(固定邊界值)、Neumann condition(固定法向變化率或熱流),或 periodic boundary(首尾相接)。數值解的形狀,往往很受邊界條件影響。
3. 為什麼 Laplacian 會出現在熱方程?
想像一個薄金屬板:某個像素大小的區域突然很熱,周圍比較冷。熱不會因為「中心點很熱」就憑空消失;它會沿著溫度梯度流動。對均勻、各向同性的材料,若溫度場是 、熱擴散係數 為常數,且沒有內部熱源,把守恆律和 Fourier heat conduction law(傅立葉熱傳導定律)接起來,就得到:
這是 heat equation(熱方程),也可視為擴散方程的一種形式。若材料參數隨位置改變,通常要保留散度形式 ;有內部熱源時還要加上 source term。可參考 擴散模型的推導 與 二維熱方程。
符號現在很有意義:
- 如果某處是尖銳的熱峰,,所以 ,熱峰會下降。
- 如果某處是低於鄰域的凹洞,,所以該處會升溫。
- 反覆更新後,尖峰與凹洞被抹平,場變得更平滑。
用最簡單的 Forward Euler time step 寫,就是:
其中 。對二維均勻五點模板的顯式更新,常見穩定條件是 ;實作時通常留一點餘裕。網格加密時,允許的 大致要按 縮小。這和「把每個格子往鄰居平均值拉近一點」完全相同;Laplacian 在這裡直接決定每個網格點的瞬時變化率。
因此,數值擴散有一個工程上的界線:不能任意調大 。這個穩定性條件適用於均勻網格與這個顯式更新式;換成非均勻網格或隱式方法,條件會改變。
4. 影像裡的 Laplacian:邊緣是二階導數的轉折
把灰階影像想成一個二維純量場:每個像素是 。物體邊界附近,亮度會快速改變。Sobel 這類方法估計一階導數;Laplacian 則把 、 方向的二階導數加總,因此常在邊緣附近出現 zero-crossing(零交叉)或正負急遽變化。這不是把 Sobel 的輸出直接再微分;兩者是不同的微分濾波器。可參考 OpenCV 的 Laplace Operator 教學。
OpenCV 的 Laplacian() 對影像計算:
在最小的 情況,常見的核心可以寫成:
你可以把它看成前面的五點 stencil,只是把 和輸出縮放先收進實作裡。
import cv2
image = cv2.imread("input.png", cv2.IMREAD_GRAYSCALE)
if image is None:
raise FileNotFoundError("input.png not found")
blurred = cv2.GaussianBlur(image, (3, 3), sigmaX=0)
laplace_response = cv2.Laplacian(
blurred, cv2.CV_64F, ksize=1, borderType=cv2.BORDER_DEFAULT
)
這裡先 Gaussian blur 是因為二階導數對高頻雜訊很敏感;不先處理雜訊,細小的像素抖動也可能被放大成假邊緣。cv2.Laplacian() 回傳的是帶正負號的二階 response,不是已經二值化的 edge map;若要產生邊緣候選,還要取絕對值、正規化、閾值化或檢測 zero-crossing。ksize=1 才對應上面展示的 kernel;其他 kernel size 會使用不同的 Sobel-derived kernel。OpenCV 的預設 BORDER_DEFAULT 也會參與影像邊界的 extrapolation。
5. Graph Laplacian:把鄰居從像素換成節點
前面假設鄰居排在規則網格上。若資料是社交網路、交通網路或知識圖,節點沒有固定的上下左右,仍然可以做同一件事:只要知道誰和誰相鄰。
以下先限定在無向、非負權重的圖。令 是 adjacency matrix(鄰接矩陣), 是 degree matrix(度數矩陣),其中 是節點 的連線權重總和。graph Laplacian 通常定義為:
對節點訊號 作用時:
這幾乎就是「我和鄰居差多少」的加總。若相鄰節點的訊號相近, 通常接近零;若節點訊號偏離鄰居的加權平均,且各項差異沒有互相抵消, 才會大。NetworkX 的 laplacian_matrix 也採用 這個定義。
這裡要特別留意符號慣例:
- 偏微分方程常把 寫成五點模板的中心係數 ,它對平滑方程很自然。
- 對非負權重的無向圖, 是對稱正半定矩陣,特徵值非負;有向圖或 signed graph 需要另外確認定義。
在間距為 的規則四鄰域網格內部點,未正規化的圖 Laplacian 通常滿足:
因此熱擴散若改用 graph Laplacian 表示,更新式要寫成 。不能只記「差一個負號」;尺度因子、權重與邊界慣例也會影響對應關係。把數學公式搬進 NumPy、SciPy 或圖學習框架時,先確認套件採用哪一種 convention,否則熱會反向擴散或平滑項會變成放大差異。
Graph Laplacian 也把局部差異接到全域結構:對非負權重的無向圖而言,Laplacian 的零特徵值個數對應連通分量;連通圖的第二小特徵值與 Fiedler vector(用來描述圖如何切成兩群的特徵向量)則可用來理解圖的切割與連通強度。可參考 NetworkX 的 laplacian_spectrum 與 algebraic_connectivity。
6. 三個常見誤解
「Laplacian 就是把所有二階導數相加」
在直角座標、純量函數、各方向尺度一致時,這個說法沒錯。但換成極座標、曲面、非均勻網格或加權圖,導數與鄰接權重都要跟著幾何改變。公式的座標形式不是永遠只有 。
「Laplacian 為零代表函數是常數」
不對。 的 Laplacian 是 ,但它明顯不是常數。 的函數稱為 harmonic function(調和函數);它表示局部值符合某種平均性,而不是整張圖完全沒有變化。可參考 LibreTexts 對 harmonic function 的說明。
「Laplacian 的輸出可以直接拿來更新任何系統」
也不對。影像流程要處理雜訊、資料型別、縮放與 zero-crossing;PDE 需要指定邊界條件與穩定的時間步長;圖資料則要確認權重、方向與符號 convention。Laplacian 給的是局部二階反應,後面的物理或資料語境決定如何解讀它。
結語:記住一個鄰域問題
遇到 Laplacian,可以先做三個檢查:
- 這個位置和它的鄰居相比,是凸、凹,還是大致平衡?
- 這個鄰域是連續座標、像素網格,還是一般圖?
- 目前採用的符號、尺度與邊界條件是什麼?
在連續場裡,答案是各方向二階變化的總和;在熱方程裡,答案變成流動方向;在像素網格裡,答案變成局部高通反應;在圖裡,答案則是節點和鄰居訊號的差異。
這些方法的共同點,是把鄰居之間的差異交給後續語境解讀:幾何、物理,或資料結構。它們的離散矩陣並不自動互換;讀清楚 convention,才是使用 Laplacian 時最值得保留的習慣。
References
- Wolfram MathWorld, Laplacian
- Mathematics LibreTexts, Divergence and Curl
- SciPy, LaplacianNd
- Mathematics LibreTexts, Modeling Spatial Movement
- Mathematics LibreTexts, The Heat Equation
- Mathematics LibreTexts, The Heat Equation: numerical stability
- OpenCV, Laplace Operator
- NetworkX, laplacian_matrix
- NetworkX, laplacian_spectrum
- NetworkX, algebraic_connectivity


