【IPMV】圖像處理與機器視覺:Lec10 Edges and Lines
本系列為2025年同濟大學自動化專業**圖像處理與機器視覺**課程筆記
Lecturer: Rui Fan、Yanchao Dong
Lec0 Course Description
Lec3 Perspective Transformation
Lec7 Image Filtering
Lec8 Image Pyramid
Lec9 Laplace Blending
Lec10 Edges and Lines
Lec11 Keypoint Features and Corners
持續更新中
文章目錄
- 【IPMV】圖像處理與機器視覺:Lec10 Edges and Lines
- 1. 邊緣是什么?
- 2. 如何找邊緣?——用梯度(Gradient)
- Image Gradient 圖像梯度
- Derivative of Gaussian 高斯導數
- 邊緣檢測算子(卷積核)
- 邊緣后處理——Tinning and Thresholding 細化與閾值處理
- 3. Canny邊緣檢測
- 4. 利用二階導數: Laplacian & LoG & DoG
- 一階與二階導數
- 拉普拉斯算子 vs. LoG vs. DoG
- 4. 直線檢測: Hough Transform
- 5. 總結
Edges and Lines
- Boundaries
- shadow boundaries
- Creases
Edge Detection 邊緣檢測
Edge operators (edge enhancement filters)
邊緣像素是在圖像強度函數的一階導數的極值處找到的。
1. 邊緣是什么?
邊緣就是圖像中顏色/亮度突然變化的地方,比如:
- 物體的輪廓線(比如杯子邊緣)
- 陰影分界線
- 文字筆畫
2. 如何找邊緣?——用梯度(Gradient)
Image Gradient 圖像梯度
邊緣出現在圖像亮度變化最大的地方,數學上用梯度表示:
- ? f = G x = [ ? f ? x ? f ? y ] \nabla f = G_x = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \\ \frac{\partial f}{\partial y} \\ \end{bmatrix} ?f=Gx?= ??x?f??y?f?? ?
- 梯度方向:亮度變化最快的方向(垂直于邊緣)
- 梯度大小(幅度):變化有多劇烈
∣ ? f ∣ = ( ? f ? x ) 2 + ( ? f ? y ) 2 | \nabla f | = \sqrt{ \left( \frac{\partial f}{\partial x} \right)^2 + \left( \frac{\partial f}{\partial y} \right)^2 } ∣?f∣=(?x?f?)2+(?y?f?)2?
(其實就是計算水平和垂直方向的亮度變化,再合成總變化強度)
Derivative of Gaussian 高斯導數
先對圖像用高斯函數模糊(去噪),再求導:
h σ ( u , v ) = 1 2 π σ 2 e ? ( u 2 + v 2 2 σ 2 ) h_{\sigma}(u, v) = \frac{1}{2\pi\sigma^2} e^{-(\frac{u^2+v^2}{2\sigma^2})} hσ?(u,v)=2πσ21?e?(2σ2u2+v2?)
優點:邊緣更平滑,減少噪聲干擾。
邊緣檢測算子(卷積核)
實際計算時,用一個小矩陣(卷積核)掃描圖像,模擬求導過程。常見算子:
常見算子 | Prewitt 算子 | Sobel 算子(更常用) |
---|---|---|
水平方向( G x G? Gx?):檢測垂直邊緣(比如豎線) G x = [ ? 1 0 1 ? 1 0 1 ? 1 0 1 ] G_x = \begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix} Gx?= ??1?1?1?000?111? ? 垂直方向( G γ G? Gγ?):檢測水平邊緣(比如橫線) G y = [ ? 1 ? 1 ? 1 0 0 0 1 1 1 ] G_y = \begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix} Gy?= ??101??101??101? ? | 水平方向( S x S? Sx?): S x = [ ? 1 0 1 ? 2 0 2 ? 1 0 1 ] S_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Sx?= ??1?2?1?000?121? ? 垂直方向( S γ S? Sγ?): S y = [ ? 1 ? 2 ? 1 0 0 0 1 2 1 ] S_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} Sy?= ??101??202??101? ? | |
特點 | 簡單,但對噪聲敏感。 | 權重更大 → 對中心像素更敏感 → 邊緣更清晰,噪聲影響更小。 |
求導——Sobel
圖像幅值
邊緣后處理——Tinning and Thresholding 細化與閾值處理
- 非極大值抑制 NMS
- 只保留梯度方向上的局部最大值點,剔除冗余邊緣,使邊緣變細。
- 效果:邊緣從“粗線”變為“單像素寬”的細線。
- 閾值處理
- 設定一個閾值,只保留梯度強度高于該值的邊緣點,生成二值化邊緣圖像。
- 示例:Sobel算子檢測后的圖像經過閾值處理,得到清晰的邊緣輪廓。
3. Canny邊緣檢測
最常用
結合高斯模糊、梯度計算、NMS和雙閾值,得到清晰、連續的邊緣。
步驟:
- 高斯濾波:先用高斯模糊降噪。
- 梯度計算:用Sobel算子計算梯度的強度和方向。
- 非極大值抑制:細化邊緣。
- 雙閾值檢測:
- 高閾值:保留強邊緣(肯定是真的邊緣,如物體輪廓)。
- 低閾值:保留弱邊緣(可能是噪聲或次要邊緣,如陰影或紋理)。
- 最終邊緣 = 強邊緣 + 與強邊緣相連的弱邊緣。
- 規則:僅保留與強邊緣相連的弱邊緣,孤立弱邊緣視為噪聲。
優勢:
- 抗噪聲能力強。
- 能檢測真實的弱邊緣(如模糊邊界)。
4. 利用二階導數: Laplacian & LoG & DoG
前面算子一階導數
一階與二階導數
- 一階導數(梯度)
- f ′ ( x ) f'(x) f′(x):檢測亮度變化最快的位置(對應邊緣)。
- 問題:對噪聲敏感(噪聲會導致虛假邊緣)。
- 二階導數(拉普拉斯)
- f ′ ′ ( x ) f''(x) f′′(x):檢測亮度變化的拐點(邊緣處二階導過零)。
- 優勢:能定位更精細的邊緣和角點。
- 高斯濾波:先對圖像平滑(低通濾波),再求導,減少噪聲影響。
拉普拉斯算子 vs. LoG vs. DoG
特性 | 拉普拉斯算子 | 高斯-拉普拉斯(LoG) | 高斯差分(DoG) |
---|---|---|---|
數學原理 | 直接計算二階導數 | 先高斯模糊,再拉普拉斯運算 | 兩個不同標準差的高斯模糊圖像相減 |
核心公式 | ? 2 = ? 2 ? x 2 + ? 2 ? y 2 \nabla^2 = \frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} ?2=?x2?2?+?y2?2? | ? 2 ( G σ ? f ) \nabla^2 (G_\sigma * f) \quad ?2(Gσ??f) | G σ 1 ? f ? G σ 2 ? f (σ??>?σ?) G_{\sigma_1} * f - G_{\sigma_2} * f \quad \text{(σ? > σ?)} Gσ1???f?Gσ2???f(σ??>?σ?) |
離散卷積核 | 3×3核(常用): [ 0 1 0 1 ? 4 1 0 1 0 ] \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} ?010?1?41?010? ? 5×5核(更精確): 1 6 [ 1 4 1 4 ? 20 4 1 4 1 ] \frac{1}{6}\begin{bmatrix} 1 & 4 & 1 \\ 4 & -20 & 4 \\ 1 & 4 & 1 \end{bmatrix} 61? ?141?4?204?141? ? | ![]() | |
抗噪性 | ? 極差(噪聲會被放大) | ? 強(高斯濾波抑制噪聲) | ?? 中等(依賴高斯參數選擇) |
計算復雜度 | ?? 低(單次卷積) | ?? 高(兩次卷積:高斯+拉普拉斯) | ?? 中(兩次高斯卷積,可并行) |
邊緣定位精度 | ? 高(無模糊,銳利邊緣) | ? 最高(零交叉點精準) | ?? 中等(近似LoG) |
檢測目標 | 邊緣、角點、細線(二階導過零點) | 邊緣(零交叉點) | 邊緣(近似零交叉點) |
是否需要調參 | ? 無參數 | ? σ(高斯標準差)需調整 | ? σ 1 σ? σ1?和 σ 2 σ? σ2?需匹配(通常 σ 1 ≈ 1.6 σ 2 σ?≈1.6σ? σ1?≈1.6σ2?) |
適用場景 | 高清晰度圖像、角點檢測、工業精密測量 | 醫學影像、復雜場景邊緣提取 | 實時處理(如SIFT特征提取、機器人視覺) |
直觀比喻 | 裸眼找邊緣(清晰但易受干擾) | 戴降噪眼鏡找邊緣(精準但耗時) | 快速對比兩副眼鏡找邊緣(平衡速度與效果) |
- 抗噪性:
- LoG > DoG > 拉普拉斯算子
- 拉普拉斯算子對噪聲敏感,適合無噪環境;LoG通過高斯濾波顯著降噪。
- 計算效率:
- 拉普拉斯算子 > DoG > LoG
- DoG 是 LoG的快速近似,適合實時系統。
- 邊緣質量:
- LoG > 拉普拉斯算子 ≈ DoG
- LoG的零交叉檢測最精準;拉普拉斯在無噪時邊緣銳利,但噪聲下失效。
- 選擇
- 需要抗噪+高精度 → LoG(如醫學影像分析)。
- 實時性要求高 → DoG(如自動駕駛車道檢測)。
- 無噪聲+簡單場景 → 拉普拉斯算子(如工業零件尺寸測量)。
優點:
- 邊緣定位更精確。
- 抗噪聲能力顯著優于普通拉普拉斯。
4. 直線檢測: Hough Transform
霍夫變換是一種從圖像中檢測幾何形狀(如直線、圓等)的算法,其核心是通過參數空間投票機制將圖像中的邊緣點映射為參數空間的累積統計,最終通過尋找峰值確定幾何形狀的參數。
- 原理:
- 參數化表示:每條直線可用極坐標參數 ( ρ , θ ) (ρ, θ) (ρ,θ) 表示
- ρ = x sin ? θ + y cos ? θ \rho = x \sin \theta + y \cos \theta ρ=xsinθ+ycosθ
- ρ \rho ρ:直線到原點的垂直距離。
- θ \theta θ:直線與x軸的夾角。
- 投票機制
- 每個邊緣點對所有可能經過它的直線投票。
- 投票最多的 ( ρ , θ ) (ρ, θ) (ρ,θ) 就是圖像中的直線。
- 參數化表示:每條直線可用極坐標參數 ( ρ , θ ) (ρ, θ) (ρ,θ) 表示
- 步驟:
- 檢測邊緣
- 先用 Canny 等算法提取圖像邊緣(得到二值邊緣圖)
- 初始化累加器:
- 創建一個二維數組 ( ρ × θ ) (\rho \times \theta) (ρ×θ),初始值為0。
- 投票過程:
- 對每個邊緣點 ( x , y ) (x, y) (x,y),遍歷所有可能的 θ \theta θ(如0°~180°),計算對應的 ρ \rho ρ,并在累加器中對應位置投票(+1)。
- 峰值檢測:
- 找到累加器中的局部最大值(即投票數最多的 ( ρ , θ ) (\rho, \theta) (ρ,θ)),這些值即為圖像中的直線參數。
- 后處理(可選):
- 對檢測到的直線進行擬合優化(如最小二乘法),剔除噪聲或合并相近直線。
特性 | 說明 |
---|---|
優點 | 對遮擋和噪聲魯棒(部分邊緣點缺失仍可檢測) 可推廣到其他形狀(圓、橢圓等) |
缺點 | 計算量大(參數空間維度隨形狀復雜度增加) 需手動設置閾值(如累加器峰值閾值) |
時間復雜度 | O ( n × m ) O(n \times m) O(n×m)( n n n為邊緣點數, m m m為 θ θ θ的離散化數量) |
應用場景:
- 車道線檢測(自動駕駛)。
- 文檔分析(檢測表格線或文字行)。
- 工業檢測(機械零件邊緣對齊)。
5. 總結
方法 | 核心思想 | 優點 | 缺點 |
---|---|---|---|
Sobel/Prewitt | 一階導數求梯度 | 計算快 | 噪聲敏感 |
Canny | 高斯導數+雙閾值+NMS | 抗噪強,邊緣完整 | 計算復雜 |
Laplacian | 直接二階導數 | 檢測精細特征(如角點) | 極度敏感噪聲 |
LoG | 高斯平滑+二階導數 | 邊緣精準,抗噪 | 計算量大 |
- 找邊緣:用Sobel或Canny(像用鉛筆描邊)
- 抗噪聲:Canny或LoG(像先涂模糊再描邊,避免手抖)
- 精細邊緣:LoG(能檢測到更微弱的邊緣變化)
霍夫變換(參數化表示+投票機制)進行直線檢測