概述
OpenCV 是一个跨平台的计算机视觉库, 支持本文来源gaodaimacom搞#代%码@网-多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 24 课)
图像尺度空间
在一定的范围内, 无论物体是大还是小, 人眼都可以分辨出来. 而计算机要有相同的能力却很难, 所以要让机器能够对物体在不同尺度下有一个统一的认知, 就需要考虑图像在不同的尺度下都存在的特点.
多分辨率金字塔
使用高斯模糊, 不同的 σ 决定了图像的平滑程度, 越大的 σ 值对应的图像越模糊. 通过使用不同的 σ 我们可以实现多分辨率金字塔.
高斯模糊:
cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
- src: 需要滤波的图片
- ksize: 卷积核大小
- sigmaX: 高斯核函数在 X 方向的的标准偏差
- sigmaY: 高斯核函数在 Y 方向的的标准偏差
例子:
import cv2 from matplotlib import pyplot as plt # 读取图片 img = cv2.imread("face.jpg") # 画图 f, ax = plt.subplots(2, 3, figsize=(12, 8)) ax[0, 0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) ax[0, 0].set_title("original") ax[0, 0].set_xticks([]) ax[0, 0].set_yticks([]) # 高斯模糊 for i in range(1, 6): # 高斯模糊 image_blur = cv2.GaussianBlur(img, (15, 15), i) # 计算子图 ax[int(i/3), i % 3].imshow(cv2.cvtColor(image_blur, cv2.COLOR_BGR2RGB)) # 标题 ax[int(i/3), i % 3].set_title("σ" + str(i)) ax[int(i/3), i % 3].set_xticks([]) ax[int(i/3), i % 3].set_yticks([]) # 展示图片 plt.show()
输出结果:
高斯差分金字塔
DoG (Difference of Gaussian) 即高斯差分金字塔, 是在高斯金字塔的基础上构建起来的. 通过对高斯金字塔逐层相减, 得到 t-1 的高斯差分金字塔:
计算极值点
DoG 空间极值检测: 将每个像素点和同一层周围的 8 个像素点以及上下两层的 18 个像素点, 共 26 个像素点进行比较. 如果一像素点大于或小于邻近的 26 个像素点的时候, 就成为了极值点.