【C++的OpenCV】第八课-OpenCV图像常用操作(五):图像形态学-图像金字塔(Gaussian pyramid、Laplacian pyramid)和向上(下)采样的使用和原理


前文链接:【C++的OpenCV】第七课-OpenCV图像常用操作(四):图像形态学-图像侵蚀和扩散的原理


一、图像金字塔

1.1 什么是图像金字塔

  • 概念:图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的图像金字塔是一系列以金字塔形状(自下而上)逐步降低,且来源于同一张原始图的图像分辨率集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
  • 意义:图像金字塔在图像学、图像处理领域得到了非常广泛的应用,例如:图像缩放、图像重构、图像融合(多分辨率塔式图像融合算法是现在较为常用的图像融合方法)、图像增强技术等。同时,图像金字塔也是许多图像学的基础。
  • 图示:
    在这里插入图片描述
  • 分类:

二、图像的向上采样

2.1 概念

用于帮助计算出拉普拉斯金字塔

2.2 函数pyrUp()

原文描述:The function performs the upsampling step of the Gaussian pyramid construction, though it can actually be used to construct the Laplacian pyramid. First, it upsamples the source image by injecting even zero rows and columns and then convolves the result with the same kernel as in pyrDown multiplied by 4”
原文翻译:该函数执行高斯金字塔构造的上采样步骤,尽管它实际上可以用于构造拉普拉斯金字塔。首先,它通过注入甚至为零的行和列来对源图像进行上采样,然后将结果与pyrDown中的内核相乘4
从上面的描述中我们可知,函数pyrUp()的上采样操作是均匀地隔行隔列加0值。上采样完成之后用下面这个卷积核进行高斯卷积模糊滤波操作。


void cv::pyrUp	(	
					InputArray 	src,
					OutputArray 	dst,
					const Size & 	dstsize = Size(),
					int 	borderType = BORDER_DEFAULT 
)	
  • 函数参数解释:
    • src:源图像(上一层源图像或者原始图像)
    • dst:经过向下采样处理后的图像
    • dstsize:输出图像的尺寸大小,是一个Size()对象,默认为一个空尺寸的对象,需要指定。
    • borderType:图像边界类型,一般保持默认,如果感兴趣,可以了解:BorderTypes的选择参数表
  • 示例:
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"

using namespace std;
using namespace cv;

int main(void)
{
    
    
	Mat srcImg = imread("/home/aelx-chen/demo.jpg");
	Mat dstImg;

	pyrUp(srcImg, dstImg, Size((srcImg.cols)*2,(srcImg.rows)*2), BORDER_DEFAULT);

	imshow("src", srcImg);
	imshow("dstImg for first time", dstImg);

	waitKey(0);
	return 0;
}

在这里插入图片描述

三、图像的向下采样

3.1 概念

        向下采样即为“缩小图片”,应用于高斯金字塔中(上边关于介绍请仔细看!)

3.2 函数pyrDown()

函数原文:函数原型

#include <opencv2/imgproc.hpp>

void cv::pyrDown(
					InputArray 	src,
					OutputArray 	dst,
					const Size & 	dstsize = Size(),
					int 	borderType = BORDER_DEFAULT 
				)	
  • 原文中的函数功能描述:Blurs an image and downsamples it.
    翻译为:模糊一张图像并对其进行下采样。(个人的理解:实现高斯金字塔每一层的近似图片)

  • 函数参数解释:

    • src:源图像(上一层源图像或者原始图像)
    • dst:经过向下采样处理后的图像
    • dstsize:输出图像的尺寸大小,是一个Size()对象,默认为一个空尺寸的对象,需要指定。
    • borderType:图像边界类型,一般保持默认,如果感兴趣,可以了解:BorderTypes的选择参数表
  • 示例:

#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"

using namespace std;
using namespace cv;

int main(void)
{
    
    
	Mat srcImg = imread("/home/aelx-chen/demo.jpg");
	Mat dstImg;

	pyrDown(srcImg, dstImg, Size((srcImg.cols + 1)/2,(srcImg.rows + 1)/2), BORDER_DEFAULT);

	imshow("src", srcImg);
	imshow("dstImg for first time", dstImg);
	//可以多次迭代使用pyrDown(),将每次的结果存储进某个容器例如Vector中形成高斯金字塔,
	//其中包含每层的图片,可以每层结合不同的处理算法完成图像处理,
	//最后融合这些图片形成自己的新图片。

	waitKey(0);
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43520503/article/details/129281733
今日推荐