CV13 图像分辨率操作(图像金字塔与resize()函数)

简介: 其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(券种不同)经过加权平均后得到。常见的 33与 55 高斯核(CV9 2D卷积与图像滤波)

1.图像金字塔的作用


通常,我们过去使用的是恒定大小的图像。但是在某些情况下,我们需要使用不同分辨率的(相同)图像。


例如,当在图像中搜索某些东西(例如人脸)时,我们不确定对象将以多大的尺寸显 示在图像中。在这种情况下,我们将需要创建一组具有不同分辨率的相同图像,并在所有图像中搜索对象。


这些具有不同分辨率的图像集称为“图像金字塔”(因为当它们堆叠在底部时,最高分辨 率的图像位于顶部,最低分辨率的图像位于顶部时,看起来像金字塔)。


2.高斯金字塔


2.1理论研究——分辨率缩小


高斯金字塔,首先将图像进行高斯核卷积,并删除原图中的所有偶数行和偶数列,最终缩小图像


其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(券种不同)经过加权平均后得到。常见的 33与 55 高斯核(CV9 2D卷积与图像滤波)


高斯核卷积让临近中心的像素点具有更高的重要度,对周围像素计算加权平均值,如下图所示,其中心位置权重最高为 0.4。


f703f2a2a3b6910be2af7c545760b88e.png


进行向下采样之后,所得到的图像 Gi+1 具有 M/2 * N/2 个像素,只有原图的四分之一。通过对输入的原始图像不停迭代以上步骤就会得到整个金字塔。注意,由于每次向下取样会删除偶数行和列,所以它会不停地丢失图像的信息


9cfe1c160c6e5d58665a54376722c556.png


  • 将level0级别的图像转换为 level1,level2,level3,level4,图像分辨率不断降低的过程称为向下取样
  • 将level4级别的图像转换为 level3,level2,level1,leve0,图像分辨率不断增大的过程称为向上取样


2.2程序分析


import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('img.png')
#经过几次高斯金字塔后
dowm = cv2.pyrDown(img)
dowm1=cv2.pyrDown(dowm)
dowm2=cv2.pyrDown(dowm1)
cv2.imshow('dowm',dowm2)
cv2.waitKey(0)
cv2.destroyAllWindows()


上采样:就是图片放大,使用pryUp函数。上采样的步骤:先将图像在每个方向放大为原来的两倍,新增的行和列用0填充,再使用先前同样的内核与放大后的图像卷积,获得新增像素的近似值。


下采样:就是图片缩小,使用pyrDown函数。下采样步骤:先将图片进行高斯内核卷积,再将所有偶数列去除。


注意:上采样和下采样是不可逆的!


2.3效果图


0aeb9f9a256a6eec6b55491d1504afb6.png


我们把3次经高斯金字塔降分辨率的图打开看看


162f4ce87510a287ba4d5a6812d5d9a4.png


可见,随着pyrdowm不断降分辨率,图片变得十分模糊了


参考资料:OpenCV计算机视觉学习(7)——图像金字塔(高斯金字塔,拉普拉斯金字塔,图像缩放resize函数


2.4拉普拉斯金字塔


拉普拉斯金字塔由高斯金字塔形成。没有专用功能。拉普拉斯金字塔图像仅像边缘图像。它的大多数元素为零。它们用于图像压缩。拉普拉斯金字塔的层由高斯金字塔的层与高斯金字塔的高层的扩展版本之间的差形成


import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('p2 (4).png')
dowm = cv2.pyrDown(img)
dowm_up = cv2.pyrUp(dowm)
l_1 = img-dowm_up
cv2.imshow('l_1',l_1)
cv2.waitKey(0)
cv2.destroyAllWindows()

dfd26a1d80184cd8ac8e4079390afc96.png


3.图像缩放—resize()函数


3.1resize()函数介绍


cv2.resize()函数是opencv中专门来调整图片的大小,改变图片尺寸,相比于金字塔,其效果更好


import cv2
import numpy as np
img = cv2.imread('MyPic.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img2 = cv2.resize(gray,(120,120),interpolation=cv2.INTER_LANCZOS4)
print(img.shape,gray.shape,img2.shape)
cv2.imshow('result',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()


输出结果:(290, 290, 3) (290, 290) (120, 120)


cv2.resize()函数


功能:对图像大小(分辨率)的操作


输入参数:

1.图像名(gray)

2.预缩放的分辨率(120,120),输出的尺寸格式为(宽,高)

3.interpolation:这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式


3.2interpolation


interpolation有以下几种:


  • INTER_NEAREST - 最邻近插值
  • INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法
  • INTER_AREA - 区域插值(使用像素区域关系进行重采样)
  • INTER_CUBIC - 三次样条插值 (超过4x4像素邻域内的双立方插值)
  • INTER_LANCZOS4 - Lanczos插值(超过8x8像素邻域内的Lanczos插值)


对于插值方法,正常情况下使用默认的双线性插值法就够了。不过这里还是有建议的:若要缩小图像,一般情形下最好用 CV_INTER_AREA 来插值,而若要放大图像,一般情况下最好用 CV_INTER_CUBIC (效率不高,慢,不推荐使用)或 CV_INTER_LINEAR (效率较高,速度较快,推荐使用)


几种常用方法的效率为:


最邻近插值>双线性插值>双立方插值>Lanczos插值


但是效率和效果是反比的,所以根据自己的情况酌情使用


4940841bcd8b93696d6c25f47cd1ec08.png

相关文章
|
存储 Java 应用服务中间件
MinIO对象存储详细安装教程
MinIO对象存储详细安装教程
2066 2
|
9月前
|
机器学习/深度学习 前端开发 数据可视化
Kimi K2 开源发布:擅长代码与 Agentic 任务!
今天,月之暗面正式发布 Kimi K2 模型,并同步开源。Kimi K2 是一款具备更强代码能力、更擅长通用 Agent 任务的 MoE 架构基础模型,总参数 1T,激活参数 32B。
1524 0
|
9月前
|
人工智能 算法 安全
AR眼镜在工业AI大模型识别的使用流程​
AR眼镜融合AI大模型,实现工业场景智能识别与预警,提升制造质量与安全。通过多模态模型适配、开源模型选型、端云协同部署及定向训练,打造高精度工业AI识别系统,助力制造业智能化升级。
|
人工智能 算法
Runway Gen-4:AI视频生成新纪元!高保真特效一键生成影视级内容
Runway Gen-4是新一代AI视频生成模型,通过参考图和文字指令即可生成具有物理真实感、叙事连贯性的高质量视频内容,支持与实拍素材无缝融合。
926 9
Runway Gen-4:AI视频生成新纪元!高保真特效一键生成影视级内容
|
机器学习/深度学习 人工智能 监控
DiffuEraser:阿里通义实验室推出的视频修复模型,支持高清修复、时间一致性优化
DiffuEraser 是阿里通义实验室推出的基于稳定扩散模型的视频修复工具,能够生成丰富的细节并保持时间一致性,适用于电影修复、监控增强等场景。
1143 27
DiffuEraser:阿里通义实验室推出的视频修复模型,支持高清修复、时间一致性优化
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
计算机视觉 开发者 Python
OpenCV合并图像中加权和与覆盖的讲解与实战(附Python源码)
OpenCV合并图像中加权和与覆盖的讲解与实战(附Python源码)
698 0
|
API 开发工具 计算机视觉
华视 CVR-100UC 身份证读取 Python 二次开发(包含SDK下载地址)
华视 CVR-100UC 身份证读取 Python 二次开发(包含SDK下载地址)
|
运维 监控 Linux
提升系统稳定性:Linux内核参数调优实战
【5月更文挑战第1天】 在运维领域,保障服务器的高效稳定运行是核心任务之一。Linux操作系统因其开源、可靠和灵活的特点被广泛应用于服务器中。本文将深入探讨通过调整Linux内核参数来优化系统性能,提升服务器的稳定性和响应能力。文章首先介绍了内核参数调优的必要性和基本原则,然后详细阐述了调优过程中的关键步骤,包括如何监控当前系统状态,确定性能瓶颈,选择合适的参数进行调优,以及调优后的测试与验证。最后,文中提供了一些常见问题的解决策略和调优的最佳实践。
979 5