cv2.pyrDown() & cv2.pyrUp()

高斯金字塔

    操作一次一个 MxN 的图像就变成了一个 M/2xN/2 的图像。所以这幅图像的面积就变为原来图像面积的四分之一,这被称为 Octave。连续进行这样的操作我们就会得到一个分辨率不断下降的图像金字塔。使用函数 
cv2.pyrDown() 和 cv2.pyrUp() 构建图像金字塔。 
 

cv2.pyrDown()

cv2.pyrDown() 从一个高分辨率大尺寸的图像向上构建一个金字塔(尺寸变小,分辨率降低)

cv2.pyrDown(src, dst=None, dstsize=None, borderType=None)

函数的作用:

对图像进行滤波然后进行下采样

参数含义:

  • src:表示输入图像
  • dst:表示输出图像
  • dstsize:表示输出图像的大小
  • borderType:表示图像边界的处理方式

 

 

cv2.pyrUp()

函数 cv2.pyrUp() 从一个低分辨率小尺寸的图像向下构建一个金子塔(尺寸变大,但分辨率不会)

cv2.pyrUp(src, dst=None, dstsize=None, borderType=None)

 

拉普拉斯金字塔

拉普拉斯金字塔可以由高斯金字塔计算得来,公式如下:

L_{i} = G_{i} - PyrUp(L_{i+1})

import cv2  
import numpy as np  
from matplotlib import pyplot as plt  


def sameSize(img1, img2):   
    rows, cols, dpt = img2.shape  
    dst = img1[:rows,:cols]  
    return dst  


apple = cv2.imread('image/apple.jpeg')  
orange = cv2.imread('image/orange.jpeg')  

G = apple.copy()  
gp_apple = [G]  
for i in xrange(6):  
    G = cv2.pyrDown(G)  
    gp_apple.append(G)  

G = orange.copy()  
gp_orange = [G]  
for j in xrange(6):  
    G = cv2.pyrDown(G)  
    gp_orange.append(G)  

lp_apple = [gp_apple[5]]  
for i in xrange(5,0,-1):  
    GE = cv2.pyrUp(gp_apple[i])  
    L = cv2.subtract(gp_apple[i-1], sameSize(GE,gp_apple[i-1]))  
    lp_apple.append(L)  

lp_orange = [gp_orange[5]]  
for i in xrange(5,0,-1):  
    GE = cv2.pyrUp(gp_orange[i])  
    L = cv2.subtract(gp_orange[i-1], sameSize(GE,gp_orange[i-1]))  
    lp_orange.append(L)  

LS = []  
for la,lb in zip(lp_apple,lp_orange):  
    rows,cols,dpt = la.shape  
    ls = np.hstack((la[:,0:cols/2],lb[:,cols/2:]))  
    LS.append(ls)  

ls_reconstruct = LS[0]  
for i in xrange(1,6):  
    ls_reconstruct = cv2.pyrUp(ls_reconstruct)  
    ls_reconstruct = cv2.add(sameSize(ls_reconstruct,LS[i]), LS[i])  

r,c,depth = apple.shape  
real = np.hstack((apple[:,0:c/2],orange[:,c/2:]))  

plt.subplot(221), plt.imshow(cv2.cvtColor(apple,cv2.COLOR_BGR2RGB))  
plt.title("apple"),plt.xticks([]),plt.yticks([])  
plt.subplot(222), plt.imshow(cv2.cvtColor(orange,cv2.COLOR_BGR2RGB))  
plt.title("orange"),plt.xticks([]),plt.yticks([])  
plt.subplot(223), plt.imshow(cv2.cvtColor(real,cv2.COLOR_BGR2RGB))  
plt.title("real"),plt.xticks([]),plt.yticks([])  
plt.subplot(224), plt.imshow(cv2.cvtColor(ls_reconstruct,cv2.COLOR_BGR2RGB))  
plt.title("laplace_pyramid"),plt.xticks([]),plt.yticks([])  
plt.show()  

 

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值