OpenCV图像处理学习十三,图像金字塔——高斯金字塔和拉普拉斯金字塔

article/2025/10/23 1:55:47

一.图像金字塔概念

我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔 。 一个图像金字塔是由一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。

金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

二.图像金字塔:

高斯金字塔 – 用来对图像进行降采样

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

-------------------------------------------------------------------------------------------------------------------------------

高斯金字塔

高斯金子塔是从底向上,逐层降采样得到。 降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。 

高斯金子塔的生成过程分为两步:     1.对当前层进行高斯模糊      2.删除当前层的偶数行与列     即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。

---------------------------------------------------------------------------------------------------------------------------------

三.高斯不同(Difference of Gaussian-DOG)

 DOG定义:

就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同(DOG) ,高斯不同是图像的内在特征,在灰度图像增强、角点检测和特征提取中经常用到。

四.API函数接口:

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

#上采样API
void pyrUp(InputArray src, OutputArraydst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )

参数说明:

第一个参数,InputArray类型的src,输入图像,Mat类的对象即可。
第二个参数,OutputArray类型的dst,输出图像,必须和源图片有一样的尺寸和类型。
第三个参数,const Size&类型的dstsize,输出图像的大小;有默认值Size(),即默认情况下,由Size(src.cols*2,src.rows*2)来进行计算。

第四个参数,int类型的borderType,即边界模式。

--------------------------------------------------------------------------------------------------------------------------------
 

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

#降采样API
void pyrDown(InputArray src,OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT)

参数说明:

第一个参数,InputArray类型的src,输入图像,Mat类的对象即可。
第二个参数,OutputArray类型的dst,输出图像,必须和源图片有一样的尺寸和类型。
第三个参数,const Size&类型的dstsize,输出图像的大小;有默认值Size(),即默认情况下,由Size Size((src.cols+1)/2, (src.rows+1)/2)来进行计算。

第四个参数,int类型的borderType,即边界模式。

归一化函数API

归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。

#归一化函数API接口
cv::normalize(InputArry src,InputOutputArray dst,double alpha=1,double beta=0,int norm_type=NORM_L2,int dtype=-1,InputArray mark=noArry())

参数说明:

src               输入图像;
dst               输出图像,图像的大小和原图像一致;
alpha           可以用来规范值,也可以用来规范范围,并且是范围的下限;
beta             只用来规范范围并且是范围的上限;
norm_type   归一化选择的数学公式类型;有NORM_INF(无穷范数),NORM_L1(1范数), NORM_INFL2(2范数),NORM_MINMAX(范围归一化)
dtype           当为负,输出在大小深度通道数都等于输入,当为正,输出只在深度与输出不同,不同的地方由dtype决定;否则 和src通道一致,depth =CV_MAT_DEPTH(dtype).
mark            掩码。选择感兴趣区域,选定后只能对该区域进行操作。
 

=========================================================================

代码实现:

#include"stdafx.h"
#include<opencv2\imgproc\types_c.h>
#include<opencv2\opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;int main(int agrc, char** argv) {Mat src, dst;src = imread("F:/photo/qx.jpg");if (!src.data) {printf("could not load image...");return -1;}//char INPUT_WIN[] = "input image";//char OUTPUT_WIN[] = "sample up";namedWindow("input image", 0);resizeWindow( "input image", 300, 300);imshow("input image", src);namedWindow("sample up", WINDOW_AUTOSIZE);// 上采样pyrUp(src, dst, Size(src.cols *2, src.rows * 2));imshow("sample up", dst);// 降采样Mat s_down;pyrDown(src, s_down, Size(src.cols / 2, src.rows / 2));imshow("s_down", s_down);// DOGMat 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)图像


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

相关文章

图像金字塔

图像金字塔是图像处理和计算机视觉中的概念&#xff0c;常常用于多尺度处理领域&#xff08;multiscale processing)&#xff0c;尤其早年的图像匹配、识别等算法中都用到了图像金字塔 高斯金字塔&#xff08;Gaussian pyramid&#xff09; 金字塔的底层为原始图像&#xff0…

【OpenCV 学习笔记】第十一章: 图像金字塔

第十一章: 图像金字塔 一、什么是图像金字塔 同一张图片不同分辨率的子图的集合。 图像金字塔底部是待处理的高分辨率图像&#xff0c;也就是原始图像&#xff0c;顶部是低分辨率的近似图像。一般情况下&#xff0c;都是每向上移动一级&#xff0c;图像的宽和高都降低为原来的…

openCV——图像金字塔

图像金字塔 理论基础 通常情况下&#xff0c;图像金字塔的底部是待处理的高分辨率图像&#xff08;原始图像&#xff09;&#xff0c;而顶部则为其低 分辨率的近似图像。向金字塔的顶部移动时&#xff0c;图像的尺寸和分辨率都不断地降低。通常情况下&#xff0c; 每向上移动一…

第11章:图像金字塔

第11章&#xff1a;图像金字塔 一、理论基础&#xff1a;1. 向下采样&#xff1a;2. 向上采样&#xff1a; 二、pyrDown函数使用&#xff1a;三、pyrUp函数及使用&#xff1a;四、采样可逆性研究五、拉普拉斯金字塔1. 定义&#xff1a;2. 应用&#xff1a; 什么是图像金子塔&am…

C语言for语句简单打印心形。

C语言简单for语句打印心形 #include<stdio.h> int main() {int i;int j;int k;int n;int m;printf("\n\n\n\n\n\n\n\n表白朋友圈:\n\n\n\n");for (i 1; i < 3; i){if (i 1){printf(" ");printf(&quo…

C语言暴力解法:围圈报数(解析与思考)

围圈报数 题目 解题步骤 一.整体逻辑 1.从第&#xff11;个人开始报数&#xff0c; 2.数到第&#xff4d;个人出列&#xff0c; 3.然后从出列的下一个人开始报数&#xff0c; 4.数到第&#xff4d;个人又出列&#xff0c;…&#xff0c;如此反复到所有的人全部出列为止。 二…

html 一个圆圈一个c,如何用c语言程序画一个圆?

以一个空心圆来举例。 /* 判断是是否在圆上 */ int isAtCircle(int x, int y, int r) { /* 将(x, y)转换为相当圆心(r, r)的坐标 */ int rx x - r; int ry y - r; double d sqrt(rx*rx ry*ry) - r; /*计算到圆心的距离*/ if(fabs(d) < 0.5)""> return 1; e…

在HTML 页面中如何显示带圈圈的数字

数字外面有个圈圈&#xff0c; 或者圈圈里有反底色显示&#xff0c;效果类似&#xff1a; 带圈圈的数字示例&#xff1a; ① 反色圈圈数字示例&#xff1a; ❶ 要实现上面的效果&#xff0c;使用以下技术都可以达成&#xff1a; 方式1&#xff0c;. 使用图片 <image&…

C语言打印出心形表白,初学C语言也能看懂~(3)

例2&#xff1a;C语言实现打印出心形&#xff0c;初学者的表白神器。 解题思路&#xff1a;这道例题可以分成4部分&#xff0c;前3行一部分&#xff0c;4-6行一部分&#xff0c;7-13行一部分&#xff0c;最后一行一部分&#xff0c;读者请仔细阅读注释&#xff0c;小林写的很详…

C语言-报数出圈问题(链表实现)

问题描述&#xff1a;n个人围成一圈&#xff0c;顺序编号。从第一个人开始从1到m报数&#xff0c;凡报到m的人退出圈子&#xff0c;编程求解最后留下的人的初始编号。 程序运行示例&#xff1a; 6 3&#xff08;两个输入数据之间有空格&#xff09; 1输入格式&#xff1a;scanf…

蓝桥杯 小朋友崇拜圈 C语言

标题&#xff1a;小朋友崇拜圈 班里N个小朋友&#xff0c;每个人都有自己最崇拜的一个小朋友&#xff08;也可以是自己&#xff09;。 在一个游戏中&#xff0c;需要小朋友坐一个圈&#xff0c; 每个小朋友都有自己最崇拜的小朋友在他的右手边。 求满足条件的圈最大多少人&…

java 圈复杂度_详解圈复杂度

详解圈复杂度 圈复杂度概念 圈复杂度(Cyclomatic complexity,简写CC)也称为条件复杂度,是一种代码复杂度的衡量标准。由托马斯J麦凯布(Thomas J. McCabe, Sr.)于1976年提出,用来表示程序的复杂度,其符号为VG或是M。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为…

控制台图形化打印二叉树(c/c++)

二叉树作为一种常见的数据结构,我们在学习的过程中会经常用到. 当我们做课设的时候,能把二叉树图形化的打印出来无疑是一个加分项,所以今天我们就来探讨一下如何图形化的打印出二叉树来. 目录 分析阶段 如何打印 如何将数据存入打印数组 代码实现 存储结构定义 二叉树的…

C语言:围圈报数游戏

游戏规则&#xff1a;有N个人围成一圈&#xff0c;顺序排号&#xff0c;从第一个人开始1到D报数&#xff0c;&#xff0c;凡报到D的人退出圈子&#xff08;下场&#xff09;&#xff0c;问最后留下来的是原来的第几号&#xff1f; 逻辑思想&#xff1a;用布尔数组记下每个人的…

c语言 打印共九行的菱形,用C语言打印图案的几种实现方法

循环的使用 维普资讯 http://doc.xuehai.net 科技伯. 1 1 0计算机与信息技术 0 S IN E I F R TO CE C N O MA I N 20 06年第 4期 用 C语言打印图案的几种实现方法 陈莹张青锋 (口师范学院计科系河南周口周 46 0 ) 60 0 摘要&#xff1a;经过几年来在 c语言教学中的实践&#xf…

C语言实现打印简易圣诞树

C语言实现打印简易圣诞树 引言想法的诞生一棵简易的圣诞树怎么构成梯形的代码梯形的叠加做一个长方形树干 总代码及其输出的简易圣诞树 引言 各位大佬好&#xff0c;我是一名大一的学生&#xff0c;目前只学习了C语言的语法基础&#xff0c;在CSDN这个平台上将自己所学的东西记…

HTML圈c怎么打出来,一种方便固定手表的展示C圈的制作方法

本实用新型属于展示C圈技术领域&#xff0c;具体涉及一种方便固定手表的展示C圈。 背景技术&#xff1a; 展示C圈是用来展示手表的必备器材&#xff0c;展示C圈采用耐用透明展示底座&#xff0c;方便工作人员为顾客展示手表的折光度。 原有展示C圈&#xff0c;手表固定在C圈上时…

c语言圈复杂度switch,干货|C语言switch\/case圈复杂度优化重构

点击上方“中兴开发者社区”&#xff0c;关注我们 每天读一篇一线开发者原创好文 ▍作者简介 作者陈彬是一名Linux驱动开发工程师&#xff0c;对Linux内核、软件设计和敏捷有较浓厚的兴趣和长期实践经验。自从项目建立起代码质量规范和监控工具后&#xff0c;如何重构高圈复杂度…

c语言圈复杂度switch,C语言switch/case圈复杂度优化重构

软件重构是改善代码可读性、可扩展性、可维护性等目的的常见技术手段。圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一。 C语言开发的项目中,switch/case代码块是一个很容…

Excel2016打开文件后显示空白

打开文件时显示 打开后空白 解决办法: