opencv图像金字塔(pyramids)

前言:
目的:

  • 了解图像金字塔
  • 使用金字塔来进行图像融合
  • 学习函数:cv2.pyrUp(),cv2.pyrDown( )

分辨率:单位英尺内,像素的个数。

image pyramids原理


两种金字塔:高斯金字塔,拉普拉斯金字塔。

  • 高斯金字塔
    高层的图像是通过低层的图像去除行列形成的。高层的每一个元素由低层的5个像素加权生成。由MN的图像变为M/2N/2图像。所以面积变为原来的四分之一,扩展时,则面积增大为原来的四倍。
    cv2.pyrUp()变大
    cv…pyrDown( ) 变小
  • Laplacian Pyramids
    由高斯金字塔形成,它没有唯一的函数。其金字塔图像都是边缘图像,大多数的像素值为0,通常用于图片压缩。拉普拉斯的层是由高斯金字塔和其扩展图像的层之间的差值形成的。

OpenCV函数使用


cv2.pyrUp(src[, dst[, dstsize[, borderType]]]) \rightarrow dst

  • src – input image.
  • dst – output image. It has the specified size and the same type as src .
  • dstsize – size of the output image; by default, it is computed as Size(src.cols2,(src.rows2), but in any case, the following conditions should be satisfied:
    jdstsize.width - src:cols ∗ 2j ≤ (dstsize.width mod 2)
    jdstsize.height - src:rows ∗ 2j ≤ (dstsize.height mod 2)

金字塔图片融合

  • 加载苹果和橘子的图片
  • 得到两张图片的高斯金字塔
  • 从高斯金字塔中得到拉普拉斯金字塔
  • 使得苹果的每一层的拉普拉斯金字塔在左边,橘子的拉普拉斯金字塔在右边,组合起来。
  • 从最终的联合的金字塔图像中重建出原始图像。(取最顶层(最小的)的两边的图片进行连接,然后扩展,cv2.pyrUp(),再与同层的拉普拉斯图像相加,不断迭代这个过程。)
    在这里插入图片描述

用到的函数是np.hsatck():堆积数组在水平方向。除了一维数组沿着第一个轴连接,其他的都相当于沿着第二个轴连接,例如3*1的矩阵hstack变为3*2。它对应的就是np.vstack(),在竖直方向堆积数组(也就是第一个轴)比如3*1的矩阵连接变为6*1还有np.dstack(),堆积数组沿着第三个轴进行

猜你喜欢

转载自blog.csdn.net/qq_28485501/article/details/85263706