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

一.图像金字塔概念

我们在图像处理中常常会调整图像大小,最常见的就是放大(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);

	// 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)图像

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在MATLAB中,高斯金字塔函数是一种用于图像处理计算机视觉的强大工具。它通常用于图像金字塔的构建,包括图像的降采样和上采样。高斯金字塔的主要优点在于它能够以相对较少的计算量实现高质量的图像处理高斯金字塔的核心概念是使用高斯函数作为图像金字塔的每个级别的滤波器。在每个级别,图像被高斯滤波器平滑,以减少噪声并降低图像的分辨率。这样,我们就可以逐步构建一个从高分辨率到低分辨率的图像金字塔。 具体来说,高斯金字塔的构建过程通常包括以下步骤: 1. 初始化:首先,创建一个与原始图像大小相同的高斯金字塔的初始层。这些初始层通常使用零填充,以便在后续步骤中能够正确地对图像进行上采样和下采样。 2. 上采样:对于每个初始层,使用高斯滤波器对图像进行上采样,生成更高分辨率的层。高斯滤波器将邻近的像素组合成一个新的像素,形成更复杂的图像细节。 3. 下采样:接下来,对于每个层,使用高斯滤波器对图像进行下采样,生成更低分辨率的层。下采样过程中,新的像素通常是从相邻的像素平均生成的,这样可以有效地降低图像的分辨率并减少计算量。 4. 合并:最后,将所有层合并在一起,形成一个完整的高斯金字塔。这样,我们就可以使用这个金字塔对图像进行各种操作,例如滤波、边缘检测等。 使用高斯金字塔函数进行图像处理的主要优点是它能够以相对较少的计算量实现高质量的图像处理。此外,由于高斯金字塔是基于高斯滤波器的,因此它可以有效地减少噪声并增强图像的细节。 在MATLAB中,可以使用内置的高斯金字塔函数来构建和操作高斯金字塔。具体的使用方法可以参考MATLAB的官方文档或相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值