09- OpenCV:图像上采样和降采样

目录

[1、上采样和降采样 简介](#1、上采样和降采样 简介)

2、采样的应用场景

3、采样的API

4、图像金字塔概念

5、代码演示


1、上采样和降采样 简介

在图像处理中,上采样(Upsampling)和降采样(Downsampling)是常用的操作。

(1)上采样(Upsampling)

上采样是将图像的分辨率增加的过程,通常使用插值方法来填充新生成的像素。OpenCV中常用的上采样函数是cv::resize,可以通过指定目标图像的尺寸来实现上采样。

(2)降采样(Downsampling)

降采样(Downsampling): 降采样是将图像的分辨率减小的过程,通常是通过删除或合并像素来实现。OpenCV中常用的降采样函数是cv::pyrDown,可以将图像尺寸减小一半

**2、**采样的应用场景

采样主要用于改变图像的分辨率;

(1)图像缩放:上采样和降采样可以用于调整图像的尺寸,实现图像的放大或缩小操作。上采样可以增加图像的分辨率,降采样可以减小图像的分辨率。

(2)图像金字塔:上采样和降采样是构建图像金字塔的基础操作。图像金字塔可以用于多尺度图像处理,如图像融合、图像特征提取、图像分割等。

(3)目标检测与识别:在目标检测和识别任务中,通常需要对输入图像进行预处理。上采样和降采样可以用于将输入图像调整到模型要求的尺寸,以便进行后续的处理和分析。

(4)图像压缩:在图像压缩算法中,降采样被广泛应用。通过降低图像的分辨率,可以减少图像数据的量,从而实现图像的压缩。

(5)图像重建:在图像重建任务中,上采样可以用于恢复图像的细节信息。通过上采样操作,可以将低分辨率的图像重建为高分辨率的图像。

(6)图像处理滤波:在一些图像处理滤波算法中,如模糊滤波、锐化滤波等,通常需要对图像进行上采样或降采样操作,以便更好地处理图像的细节和特征。

这些只是上采样和降采样的一些常见应用场景,实际上还有很多其他领域和任务也会使用到这两种操作。根据具体的需求和任务,选择合适的上采样和降采样方法非常重要。

3、采样的API

(1)上采样(cv::pyrUp) -- zoom in 放大

pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)) 生成的图像是原图在宽与高各放大两倍

// 函数原型

cv::pyrUp(

InputArray src, // 输入图像

OutputArray dst, // 输出图像,尺寸为原图像的2倍

const Size& dstsize = Size(), // 目标图像的尺寸,默认为空,表示根据原图像计算得出

int borderType = BORDER_DEFAULT // 边界类型,默认为BORDER_DEFAULT

)

(2)降采样 (cv::pyrDown) -- zoom out 缩小

pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2)) 生成的图像是原图在宽与高各缩小1/2

// 函数原型

cv::pyrDown(

InputArray src, // 输入图像

OutputArray dst, // 输出图像,尺寸为原图像的一半

const Size& dstsize = Size(), // 目标图像的尺寸,默认为空,表示根据原图像计算得出

int borderType = BORDER_DEFAULT // 边界类型,默认为BORDER_DEFAULT

)

4、图像金字塔概念

(1)我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔

一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。

从图看得出来:

--- 分辨率往下越来越高,叫"上采样",得到一个更高分辨率的图像。

---分辨率往上越来越低,叫"降采样",得到一个更低分辨率的图像。

(2)认识2个重要的概念:

--- 高斯金子塔 -- 用来对图像进行降采样

--- 拉普拉斯金字塔:用来重建一张图片根据它的上层降采样图片

(3)图像金字塔概念 -- 高斯金字塔

1)高斯金子塔是从底向上,逐层降采样得到。

2)降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。

3)高斯金子塔的生成过程分为两步:

  • 对当前层进行高斯模糊

  • 删除当前层的偶数行与列

即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。

(4)高斯不同(Difference of Gaussian-DOG)

1)定义:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像。称为高斯不同(DOG)

2)高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。

5、代码演示
cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>
#include "math.h"

using namespace cv;
int main(int agrc, char** argv) {
	Mat src, dst;
	src = imread("test.jpg");
	if (!src.data) {
		printf("could not load image...");
		return -1;
	}

	char INPUT_WIN[] = "input image";
	char OUTPUT_WIN[] = "sample up";
	namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, src);

	// 上采样
	pyrUp(src, dst, Size(src.cols*2, src.rows * 2));
	imshow(OUTPUT_WIN, dst);

	// 降采样
	Mat s_down;
	pyrDown(src, s_down, Size(src.cols / 2, src.rows / 2));
	imshow("sample down", s_down);

	// DOG
	Mat gray_src, g1, g2, dogImg;
	cvtColor(src, gray_src, CV_BGR2GRAY);
	GaussianBlur(gray_src, g1, Size(5, 5), 0, 0);
	GaussianBlur(g1, g2, Size(5, 5), 0, 0);
	subtract(g1, g2, dogImg, Mat());

	// 归一化显示
	normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);
	imshow("DOG Image", dogImg);

	waitKey(0);
	return 0;
}

效果展示:(左边是高斯金字塔,右边是高斯不同DOG)

相关推荐
文心快码BaiduComate44 分钟前
百度云与光本位签署战略合作:用AI Agent 重构芯片研发流程
前端·人工智能·架构
风象南1 小时前
Claude Code这个隐藏技能,让我告别PPT焦虑
人工智能·后端
Mintopia2 小时前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮3 小时前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬3 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia3 小时前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区4 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两6 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
前端付豪6 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain