opencv——上采样与降采样

article/2025/9/24 21:52:23

目录

    • 图像金字塔
      • 为什么要使用图像金字塔
    • 上采样与降采样
    • 高斯金字塔
    • 高斯不同
    • 拉普拉斯金字塔
    • 相关API
      • 上采样
      • 降采样
    • 上采样与降采样代码实现
      • 代码
      • 效果
    • 先降采样再上采样代码实现
    • 高斯不同代码实现

图像金字塔

在这里插入图片描述
这个也可以看做金字塔,如果我们把一个小方格当成一个二值图像的像素,那么我们可以从最底层变到最高层,也可以从最高层变到最底层。
那如果这是一个图像的话,从上往下,我们就实现了图像的放大,从下往上就实现了图像的缩小。

这就想金字塔一样,是四棱锥

一个图像金字塔就是一系列的图像组成。最下方是尺寸最大,最上方是尺寸最小。

为什么要使用图像金字塔

几何变换同样能放大缩小(双线性差值、双立方差值)。

我们要通过图像金字塔来产生一系列不同分辨率的图像,然后在不同的尺度空间来寻找图像对应的特征。因为我们不知道我们输入的图像是什么情况。

图像的金字塔变换会保证图像的特征一直存在

我们可以利用这样的四棱锥进行进行图像的缩放,我们将这个四棱锥称之为:图像金字塔

而图像的放大与缩小分别称之为上采样和降采样或下采样

上采样与降采样

上采样就是放大图像,通过放大图像,我们可以增加图像的像素,从而可以得到更高的分辨率。

降采样就是缩小图像,通过缩小图像,我们可以减少图像的像素,一方面,我们可以生成对应图像的缩略图,另一方面,我们可以减少图像的大小,节约内存。

但是我们通过上采样的得到的图,和经过缩小的图像的原图还是有区别的,因为我们很难真正获得图像的原始位置的像素,所以通过上采样得到的图,可能会看着不是那么清晰,那么流畅,图像质量不是那么的好。

上采样与降采样不仅能改变图像的清晰度(分辨率),也能改变图像的大小

接下来我们着重讲两个图像金字塔:高斯金字塔和拉普拉斯金字塔

高斯金字塔

高斯金字塔是从底向上,用于对图像进行降采样。
高斯金字塔对原图像删除偶数行与列,即得到降采样之后上一层的图片。所以经过一次高斯金字塔,图像的行列变为原来的1/2 。

具体的步骤分为两步:

  • 1.进行高斯模糊

  • 2.删除当前层的偶数行与列。
    即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。

高斯不同

做了高斯金字塔后,要得到每层中的图像特征。我们就可以通过高斯不同或拉普拉斯不同。

把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像。称为高斯不同(Difference of Gaussian-DOG)。

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

拉普拉斯金字塔

拉普拉斯金字塔很高斯金字塔不同,是用其上层的图像,获得其下层的图像

  • 我们可以通过高斯金字塔进行图像的降采样
  • 可以使用拉普拉斯金字塔进行图像的上采样

图像的金字塔变换会保证图像的特征一直存在

相关API

示例

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

上采样

void pyrUp( InputArray src, OutputArray dst,                         const Size& dstsize = Size(), int borderType = BORDER_DEFAULT 
);
  • (1)InputArray类型的src ,输入图像

  • (2)OutputArray类型的dst ,输出图像,图像的大小是规定的(根据参数3)和输入图像有相同的类型。

  • (3)Size类型的指针dstsize ,设定的输出图像大小

  • (4)int类型的borderType ,像素外推方法,请参见cv::BorderTypes(仅支持BORDER_DEFAULT)。

降采样

void pyrDown( InputArray src, OutputArray dst,                         const Size& dstsize = Size(), int borderType = BORDER_DEFAULT 
);
  • (1)InputArray类型的src ,输入图像。

  • (2)OutputArray类型的dst ,输出图像,图像的大小是规定的(根据参数3)和输入图像有相同的类型。

  • (3)Size类型的指针dstsize ,设定的输出图像大小。

  • (4)int类型的borderType ,像素外推方法,请参见cv::BorderTypes(仅支持BORDER_DEFAULT)。

上采样函数和降采样函数的图像一般在使用过程中,我们只设置前三个参数。

上采样与降采样代码实现

代码

#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat img, src;img = imread("C:/Users/86176/Pictures/pics/lena(1).tiff");if (!img.data){cout << "could not load image !;"return -1;}imshow("show img", img);pyrUp(img, src, Size(img.cols * 2, img.rows * 2));imshow("output up image", src);pyrDown(img, src, Size(img.cols / 2, img.rows / 2));imshow("output down image", src);waitKey(0);return 0;
}

效果

在这里插入图片描述

先降采样再上采样代码实现

#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat img;img = imread("C:/Users/86176/Pictures/pics/lena(1).tiff");if (!img.data){cout << "could not load image !";return -1;}imshow("show img", img);pyrDown(img, img, Size(img.cols / 2, img.rows / 2));pyrUp(img, img, Size(img.cols * 2, img.rows * 2));imshow("output down image", img);waitKey(0);return 0;
}

在这里插入图片描述
结果比之前模糊,可以达到一个图像压缩的效果。

高斯不同代码实现

#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat src;src = imread("C:/Users/86176/Pictures/pics/lena(1).tiff");if (!src.data){cout << "could not load image !";return -1;}imshow("show img", src);//dogMat gray, img1, img2, dogimg, dst;cvtColor(src, gray, CV_BGR2GRAY);GaussianBlur(gray, img1, Size(3,3),0,0);GaussianBlur(img1, img2, Size(3,3),0,0);subtract(img1, img2, dogimg, Mat());imshow("DOG img", dogimg);//将dog图像映射到0~255,否则像素值小,看不清normalize(dogimg, dst, 255, 0, NORM_MINMAX);//第五个参数的含义,找出原图最大最小值差值▲,将输入图像每个像素减去最小值除以▲再乘最大值imshow("DOG img dst", dst);waitKey(0);return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/yZJmO7GV.shtml

相关文章

降采样数字滤波器-MATLAB建模

用于SD-ADC后级的降采样数字滤波器 说明 第六届集创赛芯海杯赛题对数字滤波器的要求不是很高&#xff0c;记录一下从Matlab搭建模型到Verilog HDL代码实现&#xff0c;到一部分后仿的过程。 Matlab-Simulink搭建模型 降采样数字滤波器由三级组成&#xff0c;第一级CIC抽取滤…

Matlab | 滤波降采样操作

文章目录 仿真代码仿真结果仿真结论 仿真代码 close all;clear;clc; fs16000;fs_j2000;f0100;t0:1/fs:10; s_k sin(2*pi*f0*t); s_k_d lowpass(s_k,1000,fs); s_k_j resample(s_k_d,1,8); windowLen 2^ceil(log2(fs)); windowLen1 2^ceil(log2(fs_j)); s1 s_k(1,1:windo…

python图像降采样,【图像处理】——改变图像的大小(降采样重采样)

目录 我们常常需要将图片变成一样大小的图片&#xff0c;这样利于整理和批量操作&#xff0c;这时候就需要使用到调整图像的大小了 这里需要使用到的是重采样和降采样&#xff0c;重采样用在拉伸图像上&#xff0c;增加的像素点的像素值是通过插值法来得到的&#xff0c;最常用…

Verilog功能模块——降采样

一. 模块功能与应用场景 模块功能&#xff1a;对输入信号进行降采样。 应用场景&#xff1a; 输入数据量太大&#xff0c;后级难以处理&#xff0c;需要减小信号量而不丢失关键信息 二. 模块框图与使用说明 参数DOWN_SAMPLING_TIME控制降采样倍数&#xff0c;参数DIN_WIDTH控…

点云降采样

点云处理有时因为数据量太大&#xff0c;我们需要对其进行下采样。 这里的方法是先将点云填入固定大小的三维网格中&#xff0c;然后每个网格中选一个点生成新的点云。 新点云即为下采样后的点云。 这里使用斯坦福兔子作为测试点云。 小兔子pcd下载地址。 原始点云&#xff1a;…

pcl 中的滤波与降采样

目录 pcl filter模块RandomSampleUniformSamplingVoxelGridStatisticalOutlierRemoval filter应用参考完 pcl filter模块 Module filters&#xff1a;https://pointclouds.org/documentation/group__filters.html RandomSample、UniformSampling、VoxelGrid都包含在其中 Rand…

降采样 matlab,改进型64倍降采样数字抽取滤波器的设计与仿真分析

1引言 ∑-△调制器与数字抽取滤波器是∑-△ADC实现16bit以上精度的关键电路模块。∑-△调制器依靠过采样与高阶闭环负反馈控制实现的噪声整形技术,将基带内的量化噪声搬移到高频段,而数字抽取滤波器则将带外高频段的噪声加以滤除,同时将输出频率降低到输入信号的奈奎斯特采样…

降采样滤波器 matlab,降采样FIR滤波器的设计与硬件实现

降采样FIR滤波器的设计与硬件实现 来源:luojiashao 作者:华仔 浏览:2051 时间:2016-08-10 14:18 标签: 摘要: 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计…

OpenCV 图像上采样和降采样

文章目录 相关概念图像金字塔高斯金字塔高斯金字塔的生成过程 高斯不同&#xff08;Difference of Gaussian-DOG&#xff09;&#xff1a;拉普拉斯金字塔 采样相关API上采样(cv::pyrUp) – zoom in 放大降采样 (cv::pyrDown) – zoom out 缩小 代码案例 好了&#xff0c;这次学…

Down-Sampling 降采样(Verilog)

简介 在图像处理领域中&#xff0c;降采样是一个非常常用的图像处理方法&#xff0c;目的是为了在大体上不改变图片的情况下&#xff0c;缩小图像&#xff0c;降低分辨率&#xff0c;减少数据的计算量&#xff0c;生成对应图像的降采样图。本质就是抽取图像数据来降低特征的维度…

关于数字信号处理中的降采样的学习总结

1、参考资料链接 https://baike.baidu.com/item/%E9%99%8D%E9%87%87%E6%A0%B7/6860368?fraladdin https://wenku.baidu.com/view/611009c881eb6294dd88d0d233d4b14e85243e4c.html https://baike.baidu.com/item/%E6%B7%B7%E5%8F%A0 https://blog.csdn.net/shenziheng1/art…

点云降采样(DownSampling)

点云降采样 1 概述 三维点云往往包含大量冗余数据&#xff0c;直接处理计算量大&#xff0c;消耗时间长&#xff0c;因此对其进行降采样是十分必要的。降采样同时也是点云预处理过程中的关键环节。 2 常用方法 2.1 体素网格下采样 2.1.1 原理 体素&#xff08;Voxel&…

对信号做降采样处理时,需要先滤波,后抽取(降采样);升采样操作与之相反

一、对信号做降采样处理时&#xff0c;需要先滤波&#xff0c;后抽取&#xff08;降采样&#xff09;的原因解释&#xff1a; 一句话就能概括&#xff0c;如果抽取时不先做滤波&#xff0c;就会导致信号混叠&#xff0c;这里的滤波器是抗混叠滤波器。 1、如果不滤波&#xff…

数字图像处理--六、图像压缩

目录 1.基本概念 1.1 图像压缩概念及其分类 1.2 数据冗余 1.3 图像信息的度量 1.4 图像保真度准则 (Fidelity Criteria) 1.5 图像压缩模型 2.图像压缩方法 2.1Huffman编码 消除编码冗余 2.2算术编码 (Arithmetic Coding) 消除编码冗余 2.3LZW编码 (Lempel-Ziv-Welch …

图像压缩之算术编码

JPEG中使用了量化、哈夫曼编码等&#xff0c;极大的压缩了图片占用的空间&#xff0c;那么是否可以进一步压缩呢&#xff1f; 从技术角度讲&#xff0c;是可以的。如DropBox开源的lepton&#xff0c;在目前的JPEG压缩基础上&#xff0c;可以再节省22%左右的空间。 lepton中使用…

数字图像处理——JPEG图像压缩

该文章的代码为数字图像的JPEG压缩模型。最后是我得到的结果。 import numpy as np import matplotlib.pyplot as plt from skimage import ioDC_Y {0: 00,1: 010,2: 011,3: 100,4: 101,5: 110,6: 1110,7: 11110,8: 111110,9: 1111110,10: 11111110,11: 111111110} AC_Y {(0…

JPEG图像压缩

转载自&#xff1a; https://blog.csdn.net/shelldon/article/details/54234433 www.thecodeway.com http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ 一、图像分割 JPEG算法的第一步&#xff0c;图像被分割成大小为8X8的小块&#xff0c;这些小块在整个压缩过程中…

JPEG2000图像压缩算法学习

压缩算法——JPEG2000 编解码原理 JPEG2000-Matlab源码实现 JPEG和JPEG2000 JPEG2000和JEPG都是静止图像压缩标准&#xff0c;最大区别是在空间域至频域转换。JPEG是基于离散余弦变换&#xff08;DCT&#xff09;&#xff0c; 而JEPG2000是基于离散小波变换&#xff08;DWT&a…

图像处理(六)——图像压缩

图像压缩模型图像数据中的冗余 三种数据冗余&#xff1a;编码冗余、像素冗余、视觉心理冗余 如果一个图像的灰度级编码&#xff0c;使用了多于实际需要的编码符号&#xff0c;就称该图像包含了编码冗余。 图像压缩中的信息论观点 字典压缩 有…

图片压缩算法

有损算法&#xff1a; JPEG&#xff0c;我们最为常用的算法。他是通过离散余弦变换&#xff0c;对图片质量尽量小的时候进行有损压缩&#xff0c;改算法对高中波特率下效果很好&#xff0c;但是对低波特率下&#xff0c;就会出现方格之类的&#xff0c;比如100多MB的MPEG电影&…