赞
踩
目录
用于机器视觉和图像压缩,一副较大的图像可以通过梯次向下采样(删除偶数行/列的像素)缩小图像
图像分割,先要建立一个图像金字塔,然后在相邻两层(G_i层和G_i+1层)的像素直接依照对应的关系,建立起”父与子“关系。而快速初始分割可以先在金字塔高层的低分辨率图像上完成,然后逐层对分割加以优化。
直接删除图像偶数行/列的像素,图像尺寸减半会丢失一些数据信息。
图像在每个维度上扩大为原来的两倍,即:(x,y)的像素映射到目标图像的(2x+1,2y+1)位置,新增的偶数行/列补0填充。然后用给定的滤波器卷积(每个维度都扩大为原来两倍的过滤器)去估计丢失像素的近似值。
pyrDown()和pyrUp()不是一个互逆的过程,值是简单的对图像进行放大和缩小,但绝对不是图像复原。如果要图像复原必须结合高斯金字塔和拉普拉斯金字塔
高斯金字塔本质上为信号的多尺度表示法
- import cv2 as cv
- import numpy as np
-
-
- def pyramid_demo(image):
- level = 3
- temp = image.copy()
- pyramid_images = []
- for i in range(level):
- dst = cv.pyrDown(temp)
- pyramid_images.append(dst)
- cv.imshow("pyramid_down_"+str(i), dst)
- temp = dst.copy()
- return pyramid_images
下式是拉普拉斯金字塔第i层的数学定义:
式中的Gi表示第i层高斯图像。而UP()操作是将源图像中位置为(x,y)的像素映射到目标图像的(2x+1,2y+1)位置,即在进行向上取样。符号表示卷积,为5x5的高斯内核。
因此,我们可以直接用OpenCV进行拉普拉斯运算:
因此:可以说成拉普拉斯金字塔=第i层的高斯塔——第i+1层pyrUp()放大(上采样)后的高斯塔
注:i+1层是比i层小的图像
- import cv2 as cv
- import numpy as np
-
-
- def pyramid_demo(image):
- level = 3
- temp = image.copy()
- pyramid_images = []
- for i in range(level):
- dst = cv.pyrDown(temp)
- pyramid_images.append(dst)
- cv.imshow("pyramid_down_"+str(i), dst)
- temp = dst.copy()
- return pyramid_images
-
-
- def lapalian_demo(image):
- dst = cv.resize(src, (image.shape[1], image.shape[1]), 0, 0, cv.INTER_LINEAR)#重新改变图像的尺寸,求拉普拉斯塔输入图像必须为方形
- #cv.imshow("dst", dst)
- pyramid_images = pyramid_demo(dst)
- level = len(pyramid_images)
- for i in range(level-1, -1, -1):
- if (i-1) < 0 :
- expand = cv.pyrUp(pyramid_images[i], dstsize=dst.shape[:2])
- lpls = cv.subtract(dst, expand)
- cv.imshow("lapalian_down_" + str(i), lpls)
- else:
- expand = cv.pyrUp(pyramid_images[i], dstsize=pyramid_images[i-1].shape[:2])
- lpls = cv.subtract(pyramid_images[i-1], expand)
- cv.imshow("lapalian_down_"+str(i), lpls)
第i层高斯金字塔=第i层拉普拉斯塔+第i+1层pyrUp()放大(上采样)后的高斯塔
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。