图像形态学-图像金字塔(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;
}

在这里插入图片描述

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
高斯金字塔可以用于图像的降采样(缩小)和升采样(放大)操作,其中降采样可以实现去噪的效果。具体步骤如下: 1. 对原始图像进行高斯滤波,得到一组模糊图像。 2. 对每个模糊图像进行下采样操作,得到一组大小不同的图像。 3. 对每个下采样图像进行高斯滤波,得到一组更模糊的图像。 4. 重复步骤2和3,直到达到所需的降采样级别。 5. 对最后一级下采样图像进行插值操作,得到原始图像的近似图像。 6. 将近似图像与原始图像相减,得到去噪后的图像。 下面是一个实现高斯金字塔去噪的示例代码: ```python import cv2 img = cv2.imread('lena.jpg') cv2.imshow('Original', img) # 构建高斯金字塔 pyramid = [img] for i in range(5): img = cv2.pyrDown(img) pyramid.append(img) # 对每个金字塔级别进行高斯滤波 for i in range(1, len(pyramid)): pyramid[i] = cv2.GaussianBlur(pyramid[i], (3, 3), 0) # 重建金字塔 for i in range(len(pyramid) - 1, 0, -1): img = cv2.pyrUp(pyramid[i]) img = cv2.resize(img, pyramid[i - 1].shape[:2][::-1]) pyramid[i - 1] -= img cv2.imshow('Denoised', pyramid[0]) cv2.waitKey() cv2.destroyAllWindows() ``` 在上面的代码中,我们首先读入了一张图像,并构建了5级高斯金字塔。然后对每个金字塔级别进行高斯滤波,得到更模糊的图像。接着我们重建了金字塔,并将重建后的图像与原始图像相减,得到去噪后的图像。最后将去噪后的图像显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白piao

创作不易,支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值