天天看點

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.rows2), 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(),再與同層的拉普拉斯圖像相加,不斷疊代這個過程。)
    opencv圖像金字塔(pyramids)

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