【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔

OpenCV 例程200篇 总目录-202205更新


【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔


6. 图像金字塔

图像金字塔是一种以多分辨率来解释图像的结构,常用于图像分割、图像压缩和机器视觉。

图像金字塔是一系列来源于同一张原始图像、以金字塔形状排列的分辨率逐步降低的图像集合。从底层图像可以看清更多细节,从顶层图像可以看到更多的轮廓特征。通常,上层图像的宽度和高度是相邻的下层图像的 1/2。

通过对原始图像进行多尺度像素采样,生成多个不同分辨率的图像。把高分辨率的原始图像放在底部,越往上的图像越小越模糊,最小的图像放在顶部,称为图像金字塔。

向下采样,分辨率逐级降低;向上采样,分辨率逐级升高。上采样和下采样是不可逆的,将下采样的图像还原回原来尺寸时会丢失高频信息,使图片变模糊。

OpenCV 为向下采样和向上采样提供了两个函数:cv2.pyrDowncv2.pyrUp


6.1 高斯金字塔(Gaussian pyramid)

高斯金字塔(Gaussian pyramid)用于向下降采样,分辨率逐级降低。

高斯金字塔通过高斯平滑和降采样获得一系列下采样图像。首先将原图像作为最底层的图像 G0(第0层),利用高斯核(5*5)进行卷积操作,然后对卷积图像进行下采样(去除偶数行和列)得到上一层的图像 G1;重复卷积和下采样操作得到上一层图像,反复迭代,形成一个金字塔形的图像数据结构。

高斯金字塔通过上采样操作可以放大图像:先将图像的高度和宽度加倍扩充,新增的行和列以 0 填充;再用相同的卷积核(乘以 4)对扩充图像进行卷积操作,就得到放大的近似图像。上采样和下采样是不可逆的,缩放过程中存在信息丢失,因此上采样还原的图像比原始图像模糊。

OpenCV 为向下采样和向上采样提供了两个函数:cv2.pyrDowncv2.pyrUp

函数说明:

cv2.pyrDown(src[, dst[, dstsize[, borderType]]]) → dst  # 向下采样
cv2.pyrUp(src[, dst[, dstsize[, borderType]]]) → dst  # 向下采样

函数 cv2.pyrDown 是从高分辨率的大尺寸图像逐次向下采样得到一系列图像,构建成为高斯金字塔,是一个重复高斯平滑并重新对图像采样的过程。

函数 cv2.pyrUp 对图像进行上采样和模糊。 它也可以用于拉普拉斯金字塔操作

参数说明:

  • src:输入图像
  • dst:输出图像,大小和类型与 src 相同
  • dstsize:输出图像的尺寸,默认为输入图像尺寸的 1/2
  • borderType:边界扩充的类型

注意事项:

  • 高斯平滑的卷积核为 5*5

例程:1.85 高斯图像金字塔

    # # 1.85:高斯图像金字塔 (Gaussian pyramid)
    img = cv2.imread("../images/imgLena.tif", flags=1)

    # 图像向下取样
    pyrD0 = img.copy()
    pyrD1 = cv2.pyrDown(pyrD0)
    pyrD2 = cv2.pyrDown(pyrD1)
    pyrD3 = cv2.pyrDown(pyrD2)

    # 图像向上取样
    pyrU3 = pyrD3.copy()
    pyrU2 = cv2.pyrUp(pyrU3)
    pyrU1 = cv2.pyrUp(pyrU2)
    pyrU0 = cv2.pyrUp(pyrU1)

    plt.figure(figsize=(10, 6))
    plt.subplot(244), plt.axis('off'), plt.title("->"+str(pyrD3.shape[:2]))
    down3 = np.zeros_like(img, dtype=np.uint8)
    down3[:pyrD3.shape[0],:pyrD3.shape[1],:] = pyrD3
    plt.imshow(cv2.cvtColor(down3, cv2.COLOR_BGR2RGB))
    plt.subplot(243), plt.axis('off'), plt.title("->"+str(pyrD2.shape[:2]))
    down2 = np.zeros_like(img, dtype=np.uint8)
    down2[:pyrD2.shape[0],:pyrD2.shape[1],:] = pyrD2
    plt.imshow(cv2.cvtColor(down2, cv2.COLOR_BGR2RGB))
    plt.subplot(242), plt.axis('off'), plt.title("->"+str(pyrD1.shape[:2]))
    down1 = np.zeros_like(img, dtype=np.uint8)
    down1[:pyrD1.shape[0],:pyrD1.shape[1],:] = pyrD1
    plt.imshow(cv2.cvtColor(down1, cv2.COLOR_BGR2RGB))
    plt.subplot(241), plt.axis('off'), plt.title(str(pyrD0.shape[:2]))
    plt.imshow(cv2.cvtColor(pyrD0, cv2.COLOR_BGR2RGB))

    plt.subplot(248), plt.axis('off'), plt.title("<-"+str(pyrU3.shape[:2]))
    up3 = np.zeros_like(img, dtype=np.uint8)
    up3[:pyrU3.shape[0],:pyrU3.shape[1],:] = pyrU3
    plt.imshow(cv2.cvtColor(up3, cv2.COLOR_BGR2RGB))
    plt.subplot(247), plt.axis('off'), plt.title("<-"+str(pyrU2.shape[:2]))
    up2 = np.zeros_like(img, dtype=np.uint8)
    up2[:pyrU2.shape[0],:pyrU2.shape[1],:] = pyrU2
    plt.imshow(cv2.cvtColor(up2, cv2.COLOR_BGR2RGB))
    plt.subplot(246), plt.axis('off'), plt.title("<-"+str(pyrU1.shape[:2]))
    up1 = np.zeros_like(img, dtype=np.uint8)
    up1[:pyrU1.shape[0],:pyrU1.shape[1],:] = pyrU1
    plt.imshow(cv2.cvtColor(up1, cv2.COLOR_BGR2RGB))
    plt.subplot(245), plt.axis('off'), plt.title(str(pyrU0.shape[:2]))
    up0 = np.zeros_like(img, dtype=np.uint8)
    up0[:pyrU0.shape[0],:pyrU0.shape[1],:] = pyrU0
    plt.imshow(cv2.cvtColor(up0, cv2.COLOR_BGR2RGB))
    plt.tight_layout()
    plt.show()

【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔_第1张图片



(本节完)


版权声明:

OpenCV 例程200篇 总目录-202205更新
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/124834527)

Copyright 2022 youcans, XUPT
Crated:2022-5-18


欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔
【youcans 的 OpenCV 例程200篇】186.图像金字塔之拉普拉斯金字塔
【youcans 的 OpenCV 例程200篇】187.由拉普拉斯金字塔还原图像
【youcans 的 OpenCV 例程200篇】188.基于拉普拉斯金字塔的图像融合
【youcans 的 OpenCV 例程200篇】189.基于掩模的拉普拉斯金字塔图像融合
【youcans 的 OpenCV 例程200篇】190.基于图像分割的图像融合
【youcans 的 OpenCV 例程200篇】191.基于图像分割的金字塔图像融合
【youcans 的 OpenCV 例程200篇】192.Gabor 滤波器组的形状
【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取
更多内容,请见:
【OpenCV 例程200篇 总目录-202206更新】

你可能感兴趣的:(opencv,python,图像处理,计算机视觉,算法)