Python | OpenCV 圖片金字塔與多尺度分析
📚 前言
在前一篇我們學會了 相機校正與畸變矯正。
在圖片處理與電腦視覺中,常常需要在不同解析度下觀察圖片特徵。
例如:人臉偵測、物件追蹤、特徵匹配,都需要在多種尺度下分析圖片。
這時候就會用到 圖片金字塔 (Image Pyramid) 與 多尺度分析 (Multi-scale Analysis)。
🔎 原理說明
- 圖片金字塔:將圖片逐層縮小或放大,形成一個「金字塔結構」。
- 高層:解析度低,圖片小。
- 低層:解析度高,圖片大。
- 用途:
- 在不同尺度下偵測特徵。
- 加速演算法,避免在原始大圖片上做大量計算。
- 提供多層次的圖片表示,方便進行匹配或搜尋。
🧠 函式與參數說明
📌 cv2.pyrDown()
用途:將圖片縮小一半,並同時進行高斯模糊,避免縮小時產生鋸齒或 aliasing。
1 | smaller = cv2.pyrDown(img) |
- img:輸入圖片。
- smaller:縮小並平滑後的圖片。
📌 cv2.pyrUp()
用途:將圖片放大一倍,並同時進行插值與模糊,使放大後的圖片保持平滑。
1 | larger = cv2.pyrUp(img) |
- img:輸入圖片。
- larger:放大並平滑後的圖片。
📌 拉普拉斯金字塔 (Laplacian Pyramid)
用途:由高斯金字塔相鄰層的差異構成,常用於圖片壓縮與融合。
它能保留圖片的細節資訊,並在多尺度下進行分析。
例如:將兩張圖片利用拉普拉斯金字塔進行平滑融合,避免邊界突兀。
1 | gaussian_expanded = cv2.pyrUp(gp[i], dstsize=gp[i-1].shape[1::-1]) |
- gp:高斯金字塔。
- gaussian_expanded:放大後的高斯圖片,與上一層對齊。
- laplacian:相鄰層的差異,代表該層的細節資訊。
💻 範例程式 — 建立圖片金字塔
1 | import cv2 |

圖:原始圖片、縮小一層、放大一層
💻 範例程式 — 多層金字塔
1 | import cv2 |

圖:高斯金字塔 — 逐層縮小圖片
💻 範例程式 — 拉普拉斯金字塔 (Laplacian Pyramid)
拉普拉斯金字塔常用於圖片壓縮與重建。
它是由高斯金字塔相鄰層的差異構成。
1 | import cv2 |

圖:拉普拉斯金字塔 — 顯示不同層次的差異
⚠️ 注意事項
pyrDown與pyrUp只能處理圖片大小為偶數的情況,否則可能會有誤差。- 金字塔層數不宜過多,否則圖片會過度模糊或失真。
- 拉普拉斯金字塔常用於圖片壓縮與融合。
📊 應用場景
- 人臉偵測:在不同尺度下搜尋人臉。
- 圖片融合:利用拉普拉斯金字塔進行平滑融合。
- 特徵匹配:在多尺度下比對圖片特徵。
- 圖片壓縮:利用金字塔結構進行高效壓縮。
🎯 結語
本篇我們學會了 圖片金字塔 (Image Pyramid) 與 多尺度分析 (Multi-scale Analysis),並透過 OpenCV 的 pyrDown、pyrUp 建立高斯金字塔與拉普拉斯金字塔。
這些技術在電腦視覺中非常常見,尤其在人臉偵測、圖片融合與特徵匹配等應用中。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
