图像金字塔——上采样和下采样

本文介绍了图像金字塔的概念及其在图像处理中的应用,包括高斯金字塔的上下采样操作,并展示了如何通过OpenCV实现图像的缩放及高斯不同(DOG)效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在图像处理中,图像的缩放常常会利用到。图像金字塔概念就和图像的缩放相关。如果把正常大小的图片放在金字塔结构的中间,那么金字塔的上部就相当于图片的收缩,金字塔的地步就相当于图片的放大。金字塔结构有两种,分别是高斯金字塔和拉普拉斯金字塔。在本次学习中,接触到的是高斯金字塔,我们把图片收缩叫做下采样,图片放大叫做上采样。相关函数如下:

(1)pyrUp(源Mat对象,目标Mat对象,Size(源对象列数*2,源对象行数*2))//上采样,生成的图像是原图在宽高上各放大1倍。

(2)pyrDown(源Mat对象,目标Mat对象,Size(源对象列数/2,源对象行数/2))//下采样,生成的图像是原图在宽高上各缩小1倍。

随带提一下高斯不同的概念(Difference of Gaussian-DOG):把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到输出图像。高斯不同能够反映图像的内在特征。

(3)subtract(Mat对象1,Mat对象2,目标Mat对象)//把两个图像相减结果赋给目标图像。

(4)normalize(源Mat对象,目标Mat对象,最大值max,最小值min,NORM_MAXMIN)//把图像的像素集合归一化到min~max的区间。

演示代码:

#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
#include<algorithm>

using namespace std;
using namespace cv;



int main()
{
	Mat src,dst_up,dst_down;
	src = imread("1.jpg", 1);
	if (src.empty())
	{
		printf("cannot load!");
		return -1;
	}
	namedWindow("原图");
	imshow("原图", src);
	
	//上采样
	pyrUp(src, dst_up, Size(src.cols * 2, src.rows * 2));
	namedWindow("上采样");
	imshow("上采样", dst_up);

	//下采样
	pyrDown(src, dst_down, Size(src.cols / 2, src.rows / 2));
	namedWindow("下采样");
	imshow("下采样", dst_down);

	//高斯不同
	Mat g1, g2, dogImg;
	GaussianBlur(src, g1, Size(5, 5), 0, 0);
	GaussianBlur(src, g2, Size(5, 5), 11, 11);
	subtract(g1, g2, dogImg);
	//归一化显示
	normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);//因为两个图像的差值肯定不大,看起来一片黑,所以需要把像素扩展到0~255的区间。
	namedWindow("高斯不同");
	imshow("高斯不同", dogImg);

	waitKey(0);
	return 0;
}

演示效果:





### 图像处理中金字塔上采样下采样的差异 在图像处理领域,金字塔结构是一种常用的技术手段来表示不同分辨率下的同一幅图像。对于高斯金字塔而言,其构建过程涉及到了两种基本操作——下采样(downsampling)上采样(upsampling)。这两种操作分别对应于降低图像的空间分辨率提高空间分辨率。 #### 下采样 (Downsampling) 当执行`pyrDown()`函数时,会先对原始图像施加低通滤波器以减少高频成分的影响,之后再按照一定比例减小图片尺寸[^4]。具体来说,在OpenCV库中调用此方法可以将给定的源图像转换成目标图像,后者宽度高度均为前者的一半左右。这种做法有助于去除噪声并简化后续计算任务,尤其适用于特征检测、匹配等场景[^2]。 ```python import cv2 face = cv2.imread('kele.png', cv2.IMREAD_GRAYSCALE) face_down = cv2.pyrDown(face) # 执行一次降采样 cv2.imshow('face_down', face_down) face_down_2 = cv2.pyrDown(face_down) # 再次降采样 cv2.imshow('face_down_2', face_down_2) ``` #### 上采样 (Upsampling) 相反地,“升采样”则是指增大图像规模的过程。然而值得注意的是,简单增加像素数量并不意味着能够恢复出更精细的信息;实际上这往往只会引入模糊效应。因此,在实际应用当中通常会在放大之前或之后配合其他算法来进行优化处理,比如边缘增强或是超分辨重建等。 ```python face_up = cv2.pyrUp(face_down_2) # 对已降采样的图像进行升采样 cv2.imshow('face_up', face_up) ``` #### 应用场景对比 - **下采样**主要用于预处理阶段,目的是为了加速运算速度或者提取高层次语义信息而不丢失整体形状特性; - **上采样**则更多应用于最终输出前调整大小至所需规格,或者是作为某些特定视觉效果的一部分,例如艺术风格迁移项目里可能会涉及到此类变换[^1]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值