天天看點

【OpenCV3.3+Python3.6】圖像金字塔

圖像金字塔

圖像金字塔是圖像多尺度表達的一種,是一種以多分辨率來解釋圖像的有效但概念簡單的結構。一幅圖像的金字塔是一系列以金字塔形狀排列的分辨率逐漸降低,且來源于同一張原始圖的圖像集合。其通過梯次向下采樣獲得,直到達到某個終止條件才停止采樣。我們将一層一層的圖像比喻成金字塔,層級越高,則圖像越小,分辨率越低。如下圖所示。

常用的圖像金字塔有高斯金字塔(Gaussian pyramid)和拉普拉斯金字塔(Laplacian pyramid)。高斯金字塔用來向下采樣,而拉普拉斯金字塔用來從金字塔低層圖像重建上層未采樣圖像。

附拉普拉斯金字塔代碼:

# 圖像金字塔
#     圖像金字塔原理
#         reduce=高斯模糊+降采樣
#         expand=擴大+卷積
#     高斯金字塔與拉普拉斯金字塔
#     代碼層面知識點:
#         PyrDown:降采樣
#         PyrUP:還原

import cv2
import numpy as np

def pyramid_demo(image):
    level=4
    temp=image.copy()
    pyramid_images=[]
    for i in range(level):
        dst=cv2.pyrDown(temp)
        pyramid_images.append(dst)
        cv2.imshow("pyrDown"+str(i),dst)
        temp=dst.copy()
    return pyramid_images

def lapalian_demo(image):#拉普拉斯金字塔
    pyramid_images=pyramid_demo(image)
    level=len(pyramid_images)
    for i in range(level-1, -1, -1):
        if(i-1)<0:
            expand = cv2.pyrUp(pyramid_images[i],dstsize=image.shape[:2])
            lpls= cv2.subtract(image, expand)
            cv2.imshow("lapalian_demo"+str(i),lpls)
        else:
            expand = cv2.pyrUp(pyramid_images[i], dstsize=pyramid_images[i - 1].shape[:2])
            lpls = cv2.subtract(pyramid_images[i - 1], expand)
            cv2.imshow("lapalian_demo" + str(i), lpls)
print("-----------------------")
src=cv2.imread("lena.jpg")
cv2.imshow("src_image",src)
lapalian_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
           
【OpenCV3.3+Python3.6】圖像金字塔
【OpenCV3.3+Python3.6】圖像金字塔