当前位置: 首页 > article >正文

数字图像处理(实践篇)十四 图像金字塔

目录

一 图像金字塔

二 涉及的函数

三 实践


一 图像金字塔

        在某些情况下,需要处理不同分辨率的(相同)图像。比如,在图像中搜索某些目标(比如人脸)的时候,不确定该目标在所述图像中会以多大的大小出现。在这种情况下,就需要创建一组具有不同分辨率的相同图像,并在所有图像中搜索目标。这些具有不同分辨率的图像集称为图像金字塔最高分辨率的图像在底部,最低分辨率的图像在顶部,它看起来像一个金字塔)。

        图像金字塔有两种,分别是高斯金字塔拉普拉斯金字塔

  • ①高斯金字塔

        高斯金字塔中的较高层次(低分辨率)是通过删除较低层次(高分辨率)图像中的连续行和列而形成的。然后,较高层次的每个像素由底层水平中具有高斯权重的 5 个像素的贡献形成的。面积减少到原始面积的四分之一。换句话说,就是下采样。图像变小,分辨率降低。

        同理,在扩展时,每个级别中的面积变为 4 倍。即上采样。相对尺寸变大,但是分辨率不会增加,图像会变得更模糊。

        可以使用 cv2.pyrDown() 和 cv2.pyrUp() 函数实现高斯金字塔。

  • ②拉普拉斯金字塔

        拉普拉斯金字塔由高斯金字塔组成。没有专用功能。拉普拉斯金字塔图像仅与边缘图像类似。大部分元素都是零。它们用于图像压缩。

二 涉及的函数

pyrDown(src[, dst[, dstsize[, borderType]]]) -> dst

pyrUp(src[, dst[, dstsize[, borderType]]]) -> dst

三 实践

①高斯金字塔

  • 代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
def dealImg(img):
    b, g, r = cv2.split(img)
    img_rgb = cv2.merge([r, g, b])
    return img_rgb
def dealImageResult(img_path):
    im = cv2.imread(img_path)
    # 下采样
    im_down1 = cv2.pyrDown(im)
    im_down2 = cv2.pyrDown(im_down1)
    # 上采样
    img_up1 = cv2.pyrUp(im_down2)
    img_up2 = cv2.pyrUp(img_up1)
    fig = plt.figure(figsize=(8, 10))
    titles = ["img", " down1", "down2", "up1", 'up2']
    im = dealImg(im)
    im_down1 = dealImg(im_down1)
    im_down2 = dealImg(im_down2)
    img_up1 = dealImg(img_up1)
    img_up2 = dealImg(img_up2)
    images = [im, im_down1, im_down2, img_up1, img_up2]
    for i in range(5):
        plt.subplot(2, 3, i + 1), plt.imshow(images[i])
        plt.title("{}".format(titles[i]), color="green", fontsize=20, ha='center')
        # plt.xticks([]), plt.yticks([])
    plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0)
    # plt.tight_layout()
    plt.show()
    fig.savefig('test_results.jpg', bbox_inches='tight')
if __name__ == '__main__':
    dealImageResult("2.jpg")
    pass
  • 结果图

注意:img不等于up2,虽然尺寸相同,但是因为一旦降低分辨率,就会丢失信息。可以看出up2的结果模糊了。

②拉普拉斯金字塔

  • 代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
def dealImg(img):
    b, g, r = cv2.split(img)
    img_rgb = cv2.merge([r, g, b])
    return img_rgb
def dealImageResult(img_path):
    im = cv2.imread(img_path)
    # 下采样
    im_down = cv2.pyrDown(im)
    # 上采样
    img_up = cv2.pyrUp(im_down)
    # 拉普拉斯金字塔
    Lp = cv2.subtract(im, img_up)
    # 或者
    Lp_1 = im - img_up
    fig = plt.figure(figsize=(8, 10))
    titles = ["img", " im_down", "img_up", "Lp", 'Lp_1']
    im = dealImg(im)
    im_down = dealImg(im_down)
    img_up = dealImg(img_up)
    Lp = dealImg(Lp)
    Lp_1 = dealImg(Lp_1)
    images = [im, im_down, img_up, Lp, Lp_1]
    for i in range(5):
        plt.subplot(2, 3, i + 1), plt.imshow(images[i])
        plt.title("{}".format(titles[i]), color="green", fontsize=20, ha='center')
        # plt.xticks([]), plt.yticks([])
    plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0)
    # plt.tight_layout()
    plt.show()
    fig.savefig('test_results.jpg', bbox_inches='tight')
if __name__ == '__main__':
    dealImageResult("2.jpg")
    pass
  • 结果图

注意:图像尺寸最好是 2 的整次幂,如 256,512 等等。否则的话,在金字塔向上的过程中图像的尺寸会不等,这会导致在拉普拉斯金字塔处理时由于不同尺寸矩阵相减操作而报错。

前文回顾

入门篇目录

 数字图像处理(入门篇)一 图像的数字化与表示

 数字图像处理(入门篇)二 颜色空间

 数字图像处理(入门篇)三 灰度化

 数字图像处理(入门篇)四 像素关系

 数字图像处理(入门篇)五 图像数据预处理之颜色空间转换

 数字图像处理(入门篇)六 图像数据预处理之坐标变化

 数字图像处理(入门篇)七 图像数据预处理之灰度变化

 数字图像处理(入门篇)八 图像数据预处理之直方图

 数字图像处理(入门篇)九 图像数据预处理之滤波

 数字图像处理(入门篇)十 边缘检测

 数字图像处理(入门篇)十一 形态学处理

 数字图像处理(入门篇)十二 自适应阈值分割

 数字图像处理(入门篇)十三 仿射变换

 数字图像处理(入门篇)十四 透视变换

实践篇目录

数字图像处理(实践篇)一 将图像中的指定目标用bBox框起来吧!

数字图像处理(实践篇)二 画出图像中目标的轮廓

数字图像处理(实践篇)三 将两张图像按照指定比例融合

数字图像处理(实践篇)四 图像拼接-基于SIFT特征点和RANSAC方法

数字图像处理(实践篇)五 使用Grabcut算法进行物体分割

数字图像处理(实践篇)六 利用hough变换进行直线检测

数字图像处理(实践篇)七 利用霍夫变换进行圆环检测

数字图像处理(实践篇)八 Harris角点检测

数字图像处理(实践篇)九 基于边缘的模板匹配

数字图像处理(实践篇)十 图像质量检测

数字图像处理(实践篇)十一 图像中的条形码解析

数字图像处理(实践篇)十二 基于小波变换的图像降噪

数字图像处理(实践篇)十三 数据增强之给图像添加噪声!


http://www.kler.cn/a/152254.html

相关文章:

  • 【腾讯云 HAI域探秘】借助高性能应用HAI——我也能使用【stable diffusion】制作高级视频封面了
  • Kubernetes 安全最佳实践:保护您的秘密
  • IDEA安装python插件并配置
  • python调用chatgpt4
  • shiro的前后端分离模式
  • 基于python和定向爬虫的商品比价系统
  • 二级等保,nginx设置问题,请求头,SSL密码组件,防web信息泄露,tls版本太老,头缺失
  • JenKins快速安装与使用,Gitlab自动触发Jenkins
  • 文献速递:机器学习在超声波非破坏性评估中的合成和增强训练数据综述(第一部分)— (机器学习方法在超声波检测中的概述)
  • 如何使用内网穿透实现无公网ip环境访问VScode远程开发
  • 如何在Ubuntu上清理缓存和垃圾文件
  • 解读免费化潮流:为何数据可视化软件向免费迈进?
  • FPGA程序前仿真和后仿真问题处理
  • 数据结构-二叉树(1)
  • Linux常用命令----mkdir命令
  • 基于视觉传感器的自主扫雷机器人设计与实现
  • 设计多级菜单的数据结构(C语言实现)
  • 论文阅读——DINOv
  • 数据探索:五款免费数据可视化工具概览
  • C++ 学习笔记——C++纯虚函数和抽象类