1.目的
在这一章当中,
- 我们将了解图像金字塔。
- 我们将使用图像金字塔创建一个新的水果,“Orapple”
- 我们将看到这些功能: cv.pyrUp() , cv.pyrDown()
在通常情况下我们使用大小恒定的图像。但在某些情况下,我们需要使用不同分辨率的同幅图像。例如,在搜索图像中的某些内容如脸部信息时,并不确定该内容在图像中占据的大小。在这种情况下,我们需要创建一组不同分辨率的相同图像,并在所有图像中搜索该内容。这些不同分辨率的图像被称为图像金字塔(因为当它们堆叠排列时,底部为最高分辨率图像而顶部为最低分辨率图像,看起来像金字塔)。
图像金字塔有两种: 1)高斯金字塔和 2)拉普拉斯金字塔
通过去除较低级别图像(较高分辨率)中的连续行和列来形成高斯金字塔中的较高级别图像(较低分辨率)。较高级别图像的每个像素值由低一级别图像的 5 个像素值高斯加权得到,由此图像面积减少到原来的四分之一。这些图像被称为 Octave(组)。当我们在金字塔中上升时(即分辨率降低),重复相似的操作。同理,在金字塔中下降时,每个级别的图像面积大小为上一级的四倍。我们可以使用 cv.pyrDown() 和 cv.pyrUp() 函数获取高斯金字塔。
2. 图像金字塔
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取原始图像
image = cv2.imread(r'D:\study\EmotionDetection_RealTime-master\data\data\te\13.jpg', cv2.IMREAD_COLOR)
# 创建图像金字塔
# 这里我们将创建三个层次的金字塔
pyramid_images = [image]
cv2.imshow('image',image)
downscaled_image = cv2.pyrDown(image)
cv2.imshow('downscaled_image',downscaled_image)
upsampled_image = cv2.pyrUp(image)
cv2.imshow('upsampled_image',upsampled_image)
# 等待按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
2.1 cv2.pyrDown()
cv2.pyrDown()
函数用于对图像进行下采样,即减少图像的分辨率。它通常用于创建图像金字塔的较低层次。下采样的具体过程是:
- 对图像进行高斯模糊。
- 将模糊后的图像沿水平方向和垂直方向各减半。
这样,原始图像的分辨率被降低了一半。
2.2 cv2.pyrUp()
cv2.pyrUp()
函数用于对图像进行上采样,即增加图像的分辨率。它通常用于创建图像金字塔的较高层次。上采样的具体过程是:
- 将图像复制到一个新的尺寸更大的图像中。
- 在新图像的边缘填充零。
- 对新图像进行高斯模糊。
这样,原始图像的分辨率被提高了一倍。
原始图像的分辨率通常指的是图像在水平和垂直方向上的像素数量。这是图像的一个重要属性,因为它决定了图像的清晰度和细节水平。
例如,一个分辨率为1024x768的图像意味着图像在水平方向上有1024个像素,在垂直方向上有768个像素。这意味着图像的总面积是786432个像素(1024x768)。
分辨率通常以像素为单位表示,但也可以用其他单位,如英寸(inches)或厘米(centimeters)。在这种情况下,分辨率指的是每英寸或每厘米的像素数量。例如,一个分辨率为300dpi(dots per inch)的图像意味着每英寸有300个像素。