当前位置: 代码迷 >> 综合 >> cv2.pyrDown() & cv2.pyrUp() 高斯金字塔 拉普拉斯金字塔
  详细解决方案

cv2.pyrDown() & cv2.pyrUp() 高斯金字塔 拉普拉斯金字塔

热度:34   发布时间:2024-01-29 23:25:50.0

高斯金字塔

 操作一次一个 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)

拉普拉斯金字塔

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

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()