前言:
目的:
- 了解图像金字塔
- 使用金字塔来进行图像融合
- 学习函数: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]]]) 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(),堆积数组沿着第三个轴进行