1.cv2.pyrDown(src) 对图片做向下采样操作,通常也可以做模糊化处理
参数说明:src表示输入的图片
2.cv2.pyrUp(src) 对图片做向上采样操作
参数说明:src表示输入的图片
高斯金字塔:分为两种情况:一种是向下采样,一种是向上采样
下采样的原理:先与Gi进行高斯卷积即高斯滤波,再将所有偶数行和列去除,实现行和列维度缩减的目的
代码:
第一步:读入图片
第二步:使用cv2.pyrDown进行高斯金字塔的下采样
第三步:使用自己的步骤做高斯金字塔的下采样,先对图像作高斯滤波,即与高斯内核卷积
第四步:将所有偶数行去除
第五步:将所有偶数列去除
import cv2 import numpy as np # 第一步:读入图片 img = cv2.imread('AM.png', 0) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows()
# 第二步:使用cv2.pyrDown进行金字塔的下采样 down = cv2.pyrDown(img) cv2.imshow('down', down) cv2.waitKey(0) cv2.destroyAllWindows()
# 按照步骤编写 # 第三步:进行高斯滤波操作,即进行高斯卷积 guassin = cv2.GaussianBlur(img, (5, 5), 1) # 第四步:去除矩阵的偶数行 guassin_x = [] rows, columns = guassin.shape[:2] for i in range(rows): if i % 2 == 1: guassin_x.append(guassin[i, :]) guassin_x = np.array(guassin_x) # 第五步:去除矩阵的偶数列 guassin_y = [] for i in range(columns): if i % 2 == 1: guassin_y.append(guassin_x[:, i]) guassin_y = np.array(guassin_y).T cv2.imshow('guassin', guassin_y) cv2.waitKey(0)
高斯金字塔进行上采样操作, 第一步先对使用0进行填充,扩大其维度,再进行高斯滤波,对滤波的结果乘与4,获得其近似值
代码:
第一步:图片读入
第二步:使用cv2.pyrUp对图像进行放大操作
第三步:使用自己的方法,先给偶数行加zeros
第四步:给偶数列加zeros
第五步:进行高斯滤波,将像素点分散开,最后乘于4,做近似截断处理
import cv2 import numpy as np # 第一步读取图片 img = cv2.imread('AM.png', 0) print(img.shape) # 第二步:使用cv2.pyrUp进行图像金字塔的上采样 Up = cv2.pyrUp(img) cv2.imshow('up', Up) cv2.waitKey(0)
# 第三步:使用自己的方法计算,在偶数行插入zero rows_zeros = [] rows, columns = img.shape[:2] for i in range(2*rows): if i % 2 == 1: rows_zeros.append(np.zeros((1, columns)).astype(int).ravel()) else: rows_zeros.append(img[int(i/2), :]) rows_zeros = np.array(rows_zeros) # 第四步:在偶数列插入zeros columns_zeros = [] for i in range(2*columns): if i % 2 == 1: columns_zeros.append(np.zeros((rows*2, 1)).astype(int).ravel()) else: columns_zeros.append(rows_zeros[:, int(i/2)]) columns_zeros = np.array(columns_zeros).T # 第五步:进行高斯卷积操作,乘于4倍后做近似处理 add_img_columns_g = np.round(cv2.GaussianBlur(columns_zeros, (5, 5), 1)).astype(int) * 4 frames = [] # 对于大于255的像素做截断操作 for i in range(add_img_columns_g.shape[0]): frame = [] for j in add_img_columns_g[i, :]: if j > 255: frame.append(255) else: frame.append(j) frames.append(frame) frames = np.array(frames)