1. 程式人生 > >opencv影象金字塔(pyramids)

opencv影象金字塔(pyramids)

前言:
目的:

  • 瞭解影象金字塔
  • 使用金字塔來進行影象融合
  • 學習函式:cv2.pyrUp(),cv2.pyrDown( )

解析度:單位英尺內,畫素的個數。

image pyramids原理


兩種金字塔:高斯金字塔,拉普拉斯金字塔。

  • 高斯金字塔
    高層的影象是通過低層的影象去除行列形成的。高層的每一個元素由低層的5個畫素加權生成。由MN的影象變為M/2N/2影象。所以面積變為原來的四分之一,擴充套件時,則面積增大為原來的四倍。
    cv2.pyrUp()變大
    cv…pyrDown( ) 變小
  • Laplacian Pyramids
    由高斯金字塔形成,它沒有唯一的函式。其金字塔影象都是邊緣影象,大多數的畫素值為0,通常用於圖片壓縮。拉普拉斯的層是由高斯金字塔和其擴充套件影象的層之間的差值形成的。

OpenCV函式使用


cv2.pyrUp(src[, dst[, dstsize[, borderType]]]) \rightarrow dst

  • src – input image.
  • dst – output image. It has the specified size and the same type as src .
  • dstsize – size of the output image; by default, it is computed as Size(src.cols2,(src.rows
    2), but in any case, the following conditions should be satisfied:
    jdstsize.width - src:cols ∗ 2j ≤ (dstsize.width mod 2)
    jdstsize.height - src:rows ∗ 2j ≤ (dstsize.height mod 2)

金字塔圖片融合

  • 載入蘋果和橘子的圖片
  • 得到兩張圖片的高斯金字塔
  • 從高斯金字塔中得到拉普拉斯金字塔
  • 使得蘋果的每一層的拉普拉斯金字塔在左邊,橘子的拉普拉斯金字塔在右邊,組合起來。
  • 從最終的聯合的金字塔影象中重建出原始影象。(取最頂層(最小的)的兩邊的圖片進行連線,然後擴充套件,cv2.pyrUp(),再與同層的拉普拉斯影象相加,不斷迭代這個過程。)
    在這裡插入圖片描述

用到的函式是np.hsatck():堆積陣列在水平方向。除了一維陣列沿著第一個軸連線,其他的都相當於沿著第二個軸連線,例如3*1的矩陣hstack變為3*2。它對應的就是np.vstack(),在豎直方向堆積陣列(也就是第一個軸)比如3*1的矩陣連線變為6*1還有np.dstack(),堆積陣列沿著第三個軸進行