OpenCV:圖像金字塔

文章目錄

  • 一、什么是圖像金字塔?
  • 二、圖像金字塔的核心操作:采樣與逆采樣
    • 1. 向下采樣(pyrDown):從高分辨率到低分辨率
      • 步驟1:高斯濾波
      • 步驟2:刪除偶數行與偶數列
      • OpenCV實戰代碼
      • 效果特點
    • 2. 向上采樣(pyrUp):從低分辨率到高分辨率
      • 步驟 1:插值補全像素
      • 步驟 2:高斯濾波
      • OpenCV 實戰代碼
      • 效果特點
  • 三、拉普拉斯金字塔:捕捉采樣丟失的細節
    • 1. 拉普拉斯金字塔的定義
    • 2. 拉普拉斯金字塔的核心作用:圖像恢復與融合
      • OpenCV 實戰:圖像恢復
      • 效果特點
  • 四、圖像金字塔的典型應用場景
    • 1. 特征點提取(SIFT、ORB 等)
    • 2. 模板匹配
    • 3. 圖像融合
    • 4. 光流跟蹤
  • 五、總結與注意事項
    • 核心知識點
    • 注意事項
    • 注意事項

在計算機視覺領域,如何高效處理不同尺度下的圖像信息,是實現 目標檢測、特征提取、圖像融合等任務的關鍵。圖像金字塔(Image Pyramid)作為一種經典的多分辨率表示方法,通過將圖像分解為不同分辨率的子圖集合,為解決上述問題提供了簡潔而強大的思路。本文將從圖像金字塔的基本概念出發,深入解析其核心操作(向下采樣與向上采樣)、數學原理,并結合OpenCV實戰代碼與典型應用場景,帶你全面掌握這一技術。


一、什么是圖像金字塔?

圖像金字塔是由同一幅圖像的多個不同分辨率子圖構成的集合,因其層級結構形似“金字塔”而得名。其核心特征如下:

  • 層級關系:金字塔的底部是原始高分辨率圖像(記為G?),向上每一層(G?、G?、…、G?)的分辨率都逐步降低,頂部可能僅保留1個像素點。
  • 分辨率變化規律:通常每向上移動一層,圖像的寬度和高度會縮小為前一層的1/2,像素總數減少為1/4(也可根據需求調整縮放比例)。
  • 核心作用:將單分辨率圖像轉化為多尺度表示,讓算法能在不同“尺度”下分析圖像(例如大尺度檢測目標整體,小尺度捕捉細節)。

示例:若原始圖像為512×512(G?),經過1次向下采樣得到256×256的G?,再采樣得到128×128的G?,以此類推,最終形成“底層大、上層小”的金字塔結構。
在這里插入圖片描述


二、圖像金字塔的核心操作:采樣與逆采樣

圖像金字塔的構建依賴兩種基礎操作:向下采樣(降采樣)向上采樣(升采樣)。這兩種操作是金字塔分層的核心,但需注意:

它們并非可逆過程——對圖像先降采樣再升采樣,無法恢復原始圖像的細節(會丟失信息)。

1. 向下采樣(pyrDown):從高分辨率到低分辨率

向下采樣是構建高斯金字塔的核心步驟,目的是降低圖像分辨率,生成金字塔的上一層子圖。其操作遵循“先濾波、再抽樣”的原則,具體流程如下:

步驟1:高斯濾波

首先對當前圖像(如G?)進行高斯模糊處理。這一步的核心目的是抑制高頻噪聲——若直接刪除像素,會導致圖像邊緣出現鋸齒或偽影,高斯濾波通過對鄰域像素加權平均,平滑圖像并保留主要結構。

高斯濾波的權重由二維高斯函數決定:
G(x,y)=12πσ2e?x2+y22σ2G(x,y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y)=2πσ21?e?2σ2x2+y2?
其中,σ為高斯核的標準差(控制模糊程度),通常使用3×3或5×5的高斯核(如3×3核:[121242121]\begin{bmatrix}1&2&1\\2&4&2\\1&2&1\end{bmatrix}?121?242?121??,需歸一化后使用)。

步驟2:刪除偶數行與偶數列

對濾波后的圖像,刪除所有偶數行和偶數列。例如512×512的圖像經此操作后,變為256×256(寬度和高度各減半),像素總數變為原來的1/4。

OpenCV實戰代碼

import cv2# 讀取原始灰度圖像(G0)
img = cv2.imread("face.png", cv2.IMREAD_GRAYSCALE)
cv2.imshow("Original (G0)", img)
cv2.waitKey(0)# 第一次向下采樣(G1:256×256)
img_down1 = cv2.pyrDown(img)
cv2.imshow("Down Sample 1 (G1)", img_down1)
cv2.waitKey(0)# 第二次向下采樣(G2:128×128)
img_down2 = cv2.pyrDown(img_down1)
cv2.imshow("Down Sample 2 (G2)", img_down2)
cv2.waitKey(0)cv2.destroyAllWindows()

在這里插入圖片描述在這里插入圖片描述
在這里插入圖片描述

效果特點

  • 分辨率降低,尺寸縮小;
  • 因高斯濾波和平滑,圖像整體更模糊,細節(如邊緣、紋理)逐漸丟失;
  • 每一層都保留了前一層的“概覽信息”(如目標的整體形狀)。

2. 向上采樣(pyrUp):從低分辨率到高分辨率

向上采樣是向下采樣的逆操作,目的是恢復圖像分辨率(生成比當前層更大的子圖),但無法恢復向下采樣時丟失的細節。其操作流程為“先插值、再濾波”:

步驟 1:插值補全像素

對當前低分辨率圖像(如 G?),在每個像素的行和列之間插入 0 值。例如 256×256 的圖像經此操作后,變為 512×512——新圖像的寬度和高度翻倍,但插入的 0 值會導致圖像出現“網格狀”空洞。

步驟 2:高斯濾波

用與向下采樣相同的高斯核(需放大 4 倍以匹配像素密度)對插值后的圖像進行濾波,填充空洞并平滑圖像。例如 3×3 高斯核需調整為 [121242121]\begin{bmatrix}1&2&1\\2&4&2\\1&2&1\end{bmatrix}?121?242?121??(與向下采樣核一致,因插值后像素密度變為原來的 1/4,核權重需保持對應)。

OpenCV 實戰代碼

# 對G1進行向上采樣(恢復為512×512,但細節丟失)
img_down1_up = cv2.pyrUp(img_down1)
cv2.imshow("Down1 -> Up (G1')", img_down1_up)
cv2.waitKey(0)# 對比原始圖像與“降采樣+升采樣”結果
cv2.imshow("Original (G0)", img)
cv2.imshow("Down1 -> Up (G1')", img_down1_up)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這里插入圖片描述
在這里插入圖片描述

效果特點

  • 尺寸與原始圖像一致(如 512×512),但清晰度遠低于原始圖像
  • 因丟失的高頻細節無法恢復,圖像整體偏模糊,邊緣過渡不銳利;
  • 驗證了 “采樣不可逆” 的特性 —— 降采樣丟失的信息無法通過升采樣完全找回。

三、拉普拉斯金字塔:捕捉采樣丟失的細節

既然向下采樣會丟失細節,如何保留這些信息以便后續恢復圖像?拉普拉斯金字塔(Laplacian Pyramid) 應運而生。它通過計算 “原始圖像與‘降采樣后再升采樣’圖像的差值”,記錄每一層向下采樣時丟失的高頻細節(邊緣、紋理等)。

1. 拉普拉斯金字塔的定義

拉普拉斯金字塔的第 i 層(LiL_iLi?)計算公式為:
Li=Gi?pyrUp(pyrDown(Gi))L_i = G_i - \text{pyrUp}(\text{pyrDown}(G_i)) Li?=Gi??pyrUp(pyrDown(Gi?))
其中:

  • GiG_iGi?:高斯金字塔的第 i 層(原始或降采樣后的圖像);
  • pyrUp(pyrDown(Gi))\text{pyrUp}(\text{pyrDown}(G_i))pyrUp(pyrDown(Gi?)):對 GiG_iGi? 先降采樣再升采樣的結果(尺寸與 GiG_iGi? 一致,但細節丟失);
  • LiL_iLi?:差值圖像,記錄了 GiG_iGi? 中被降采樣丟失的高頻細節(邊緣、紋理等)。

示例

  • L0=G0?pyrUp(pyrDown(G0))L_0 = G_0 - \text{pyrUp}(\text{pyrDown}(G_0))L0?=G0??pyrUp(pyrDown(G0?)) → 記錄 G0G_0G0?G1G_1G1? 丟失的細節;
  • L1=G1?pyrUp(pyrDown(G1))L_1 = G_1 - \text{pyrUp}(\text{pyrDown}(G_1))L1?=G1??pyrUp(pyrDown(G1?)) → 記錄 G1G_1G1?G2G_2G2? 丟失的細節;
  • 以此類推,拉普拉斯金字塔的頂層為高斯金字塔的頂層(無更高層可采樣)。

2. 拉普拉斯金字塔的核心作用:圖像恢復與融合

拉普拉斯金字塔的最大價值在于恢復高分辨率圖像。通過“高斯金字塔的高層圖像 + 拉普拉斯金字塔的對應細節”,可逐步重建原始圖像:

  1. 從高斯金字塔頂層 GnG_nGn? 開始,對其進行升采樣:pyrUp(Gn)\text{pyrUp}(G_n)pyrUp(Gn?)
  2. 加上拉普拉斯金字塔的 Ln?1L_{n-1}Ln?1? 層,得到 Gn?1G_{n-1}Gn?1?:$ G_{n-1} = \text{pyrUp}(G_n) + L_{n-1} $;
  3. 重復步驟 1 - 2,直到恢復出原始圖像 G0G_0G0?

OpenCV 實戰:圖像恢復

# 計算拉普拉斯金字塔L0和L1
L0 = img - cv2.pyrUp(img_down1)  # G0 - pyrUp(G1)
L1 = img_down1 - cv2.pyrUp(img_down2)  # G1 - pyrUp(G2)# 顯示拉普拉斯細節(黑色背景下的白色邊緣,即丟失的細節)
cv2.imshow("Laplacian L0", L0)
cv2.imshow("Laplacian L1", L1)
cv2.waitKey(0)# 用L0恢復原始圖像:pyrUp(G1) + L0 = G0
recovered_img = cv2.pyrUp(img_down1) + L0
cv2.imshow("Recovered Image (G0)", recovered_img)
cv2.imshow("Original Image (G0)", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

效果特點

  • 拉普拉斯圖像(L0L_{0}L0?L1L_{1}L1?)以 “黑色背景 + 白色邊緣” 為主,直觀展示了各層丟失的細節;
  • 恢復后的圖像與原始圖像幾乎一致(微小差異來自數值精度),驗證了拉普拉斯金字塔的細節保留能力。

四、圖像金字塔的典型應用場景

圖像金字塔的多尺度特性使其成為計算機視覺的基礎工具,廣泛應用于以下場景:

1. 特征點提取(SIFT、ORB 等)

SIFT(尺度不變特征變換)是經典的特征提取算法,其核心是“在不同尺度下檢測穩定的特征點”。圖像金字塔為 SIFT 提供了多尺度基礎:

  • 對原始圖像構建高斯金字塔(不同 σ 的模糊圖像);
  • 計算相鄰層的差值(高斯差分金字塔,DoG),檢測極值點(潛在特征點);
  • 結合拉普拉斯金字塔的細節,篩選出尺度不變的特征點,用于圖像匹配、目標識別。

2. 模板匹配

模板匹配是在大圖像中尋找與小模板相似區域的任務。若直接在原始圖像中匹配,可能因“模板與目標尺度不一致”導致匹配失敗。圖像金字塔的解決方案是:

  1. 對原始圖像和模板分別構建金字塔;
  2. 從金字塔頂層(低分辨率)開始匹配,快速定位大致區域;
  3. 逐步向下層(高分辨率)細化匹配,提高精度。

這種“從粗到細”的匹配方式,既提升了速度,又解決了尺度不一致問題。

3. 圖像融合

在圖像拼接(如全景圖)或曝光融合中,需將多幅圖像的重疊區域平滑過渡。圖像金字塔的融合流程為:

  1. 對每幅圖像構建高斯金字塔(獲取不同尺度的概覽);
  2. 構建對應的拉普拉斯金字塔(獲取不同尺度的細節);
  3. 在拉普拉斯金字塔的每一層,對重疊區域進行加權融合(如左側圖像權重從 1→0,右側從 0→1);
  4. 從融合后的拉普拉斯金字塔頂層開始,逐步向上恢復,得到最終融合圖像。

優勢:可避免融合邊緣出現 “拼接痕跡”,實現平滑過渡。

4. 光流跟蹤

光流跟蹤用于檢測視頻中運動目標的 “瞬時速度”。由于目標可能在視頻中縮放(如靠近 / 遠離攝像頭),需在多尺度下跟蹤:

  • 對視頻的連續幀構建圖像金字塔;
  • 在頂層(低分辨率)跟蹤目標的大致運動方向;
  • 向下層(高分辨率)細化跟蹤位置,提高精度;
  • 結合各層結果,得到目標在原始分辨率下的光流向量。

五、總結與注意事項

圖像金字塔作為計算機視覺的基礎技術,其核心價值在于將單分辨率圖像轉化為多尺度表示,解決了 “尺度不一致”“細節與概覽平衡” 等關鍵問題。

核心知識點

  1. 高斯金字塔:通過 “向下采樣” 構建,每一層都是前一層的低分辨率平滑版本,用于獲取圖像的概覽信息;
  2. 向上采樣:恢復圖像尺寸但無法恢復細節,驗證了 “采樣不可逆”;
  3. 拉普拉斯金字塔:記錄向下采樣丟失的細節,用于圖像恢復與融合;
  4. 應用場景:特征提取(SIFT)、模板匹配、圖像融合、光流跟蹤等。

注意事項

  • 分辨率變化:默認每一層的寬 / 高為前一層的 1/2,需注意圖像尺寸需為 2 的整數次冪(如 512、256),否則可能出現尺寸偏差;
  • 噪聲影響:向下采樣前的高斯濾波需合理選擇 σ(過小易保留噪聲,過大易模糊細節);
    錄向下采樣丟失的細節,用于圖像恢復與融合;
  1. 應用場景:特征提取(SIFT)、模板匹配、圖像融合、光流跟蹤等。

注意事項

  • 分辨率變化:默認每一層的寬 / 高為前一層的 1/2,需注意圖像尺寸需為 2 的整數次冪(如 512、256),否則可能出現尺寸偏差;
  • 噪聲影響:向下采樣前的高斯濾波需合理選擇 σ(過小易保留噪聲,過大易模糊細節);
  • OpenCV 函數細節cv2.pyrDown()cv2.pyrUp()dstsize參數可自定義輸出尺寸,但需遵循 “向下采樣為 1/2,向上采樣為 2 倍” 的原則,否則會導致后續計算錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96332.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVS與Keepalived詳解(一)負載均衡集群介紹

文章目錄前言一、什么是LVS?二、四層(L4)負載均衡的最佳解決方案是什么?2.1解決方案分類與對比(負載均衡的三種方式介紹)2.1.1 硬件負載均衡 (Hardware Load Balancer)2.1.2 軟件負載均衡 (Software Load B…

消息隊列-kafka完結

基本概念和操作 基本概念 簡單概念:::color4 Broker:如果將kafka比喻成數據倉庫網絡,那么Broker就是網絡中的倉庫節點,比如快遞站,在該節點內可以獨立運行,并且多個Broker可以連接起來,構建kafka集群Topic&…

Chromium 138 編譯指南 Windows篇:環境變量配置與構建優化(三)

引言配置,往往決定成敗。在軟件開發的世界里,環境變量就像是一位無聲的指揮家,默默地協調著各個組件的協同工作。對于Chromium 138這樣一個擁有數千萬行代碼的超大型項目而言,正確的環境變量配置更是編譯成功的關鍵所在。也許您曾…

LabVIEW加載 STL 模型至 3D 場景 源碼見附件

LabVIEW 中 STL 模型的導入與 3D 場景顯示,基于示例代碼邏輯,結合格式兼容性、功能實現步驟及多樣化顯示方式,適用于三維可視化溫控、機械零件模擬等場景。 1示例代碼 NI 社區案例 “Add an STL file to 3D scene using LabVIEW” 提供了經…

硅基計劃3.0 Map類Set類

文章目錄一、二叉搜索樹(排序樹)1. 概念初識2. 模擬實現1. 創建搜索樹節點2. 查找指定元素是否存在3. 插入4. 刪除二、Map類1. put——設置單詞以及其頻次2. get——獲取單詞頻次3. getOrDefault——獲取單詞頻次或返回默認值4. remove——刪除單詞頻次信…

LeetCode 刷題【73. 矩陣置零】

73. 矩陣置零 自己做 解&#xff1a;標記消除 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {vector<bool> x(matrix.size(), false); //要置0的行vector<bool> y(matrix[0].size(), false); //…

Unity學習----【進階】TextMeshPro學習(一)--基礎知識點

來源于唐老獅的視頻教學&#xff0c;僅作記錄和感悟記錄&#xff0c;方便日后復習或者查找 一.導入TextMeshPro 對于新創建的工程&#xff0c;可以直接在這里導入TMP必要的資源&#xff08;上面&#xff09;&#xff0c;以及TMP的實例和擴展&#xff08;下面&#xff09; 導入之…

BigDecimal(用于處理超出double范圍的浮點數)

BigDecimal 是 Java 中 java.math 包提供的高精度十進制浮點數類&#xff0c;專為解決基本類型&#xff08;float/double&#xff09;的精度缺陷而設計&#xff0c;廣泛用于金融、科學計算等對精度要求極高的場景。以下從核心特性、使用方法、常見問題對比、注意事項等方面詳細…

Nginx 優化

文章目錄1、隱藏版本號2、修改用戶與組3、緩存時間4、日志切割5、連接超時6、更改進程數7、配置網頁8、防盜鏈1、隱藏版本號 隱藏nginx的版本號&#xff0c;為了防止惡意用戶利用已知漏洞進行攻擊 ## 查看版本號 curl -I http://192.168.10.23方法一&#xff1a;修改配置文件…

基于多模態與主動學習的車船飛機圖像識別系統研究與應用技術方案

技術方案 一、技術背景與研究現狀 圖像識別是計算機視覺的核心任務之一&#xff0c;隨著深度學習的發展&#xff0c;基于 卷積神經網絡&#xff08;CNN&#xff09; 與 視覺Transformer&#xff08;ViT&#xff09; 的圖像分類方法已成為主流。 根據《圖像分類技術選型——截止…

Word2Vec詞嵌入技術和動態詞嵌入技術

Word2Vec&#xff08;Word to Vector&#xff09;是 2013 年由 Google 團隊提出的無監督詞嵌入模型&#xff0c;是一種靜態詞嵌入技術&#xff0c;核心目標是將自然語言中的離散詞匯映射為低維、稠密的實數向量&#xff08;即 “詞向量”&#xff09;&#xff0c;讓向量空間的距…

Netty從0到1系列之Netty邏輯架構【上】

文章目錄一、Netty邏輯架構【上】1.1 網絡通信層1.1.1 BootStrap & ServerBootStrap1. ?核心方法鏈與配置2. ? 架構與流程3. ? 底層實現與原理分析4. ? 實踐經驗與總結1.1.2 Channel1.2 事件調度層1.2.1 事件調度層概述1.2.2 EventLoop【事件循環】1.2.3 EventLoopGrou…

Spring Cloud 高頻面試題詳解(含代碼示例與深度解析)

文章目錄Spring Cloud 高頻面試題詳解&#xff08;含代碼示例與深度解析&#xff09;1. 什么是 Spring Cloud&#xff1f;它與 Spring Boot 有什么關系&#xff1f;2. 服務發現&#xff1a;Eureka 和 Nacos 的區別與選型&#xff1f;Eureka 示例與原理Eureka vs Nacos 對比表3.…

Ascend310B重構驅動run包

在Atlas 200I AI加速模塊(Ascend310B)移植過程中如需要將自己編譯的Image、dt.img及內核模塊打包到啟動鏡像包中需要對"Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run"(下面統稱驅動run包)進行重構。下面將介紹如何重構run包。 重構驅動run包需…

Leecode hot100 - 287. 尋找重復數

題目描述 287. 尋找重復數 - 力扣&#xff08;LeetCode&#xff09; 定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 [1, n] 范圍內&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;返…

機器人控制器開發(驅動層——奧比大白相機適配)

文章總覽 編譯OrbbecSDK_ROS2的代碼 執行命令 colcon buildros2 launch orbbec_camera dabai.launch.py問題1&#xff1a; 運行時報錯&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not…

`vcpkg` 微軟開源的 C/C++ 包管理工具的使用和安裝使用spdlog

vcpkg 是 微軟開源的 C/C 包管理工具&#xff0c;類似于 Python 的 pip、Node.js 的 npm、Rust 的 cargo。 它的主要作用是&#xff1a;幫助你快速下載、編譯、安裝和管理 C/C 第三方庫&#xff0c;并自動配置到你的項目&#xff08;比如 Visual Studio、CMake、MSBuild&#x…

Mysql 幻讀詳解

我們來詳細地聊一聊 MySQL InnoDB 中的“幻讀”&#xff08;Phantom Read&#xff09;問題。這是一個在數據庫事務隔離中非常核心且有時令人困惑的概念。 我會從定義、例子、原因以及解決方案幾個方面來徹底講清楚。 1. 什么是幻讀&#xff1f; 官方定義&#xff1a;幻讀指的…

如何生成 GitHub Token(用于 Hexo 部署):保姆級教程+避坑指南

如何生成 GitHub Token&#xff08;用于 Hexo 部署&#xff09;&#xff1a;保姆級教程避坑指南 前置說明&#xff1a;為什么需要 GitHub Token&#xff1f; 在使用 Hexo 部署博客到 GitHub Pages 時&#xff0c;你可能會遇到「密碼驗證失敗」或「需要雙重驗證」的問題——這…

常用加密算法之 AES 簡介及應用

相關系列文章 常用加密算法之 SM4 簡介及應用常用加密算法之 RSA 簡介及應用 引言 AES&#xff08;Advanced Encryption Standard&#xff0c;高級加密標準&#xff09;是一種??廣泛使用的對稱分組加密算法??&#xff0c;它使用相同的密鑰進行加密和解密操作&#xff0c…