opencv--高斯金字塔—上采样—下采样

 1、图像金字塔结构

图像金字塔是图像一种多尺度的表达,一幅图像的金字塔是一系列图像以金字塔的形状排列,并且分辨率逐级降低,这些低分辨率的图像都是经过图像向下采样得到的。图像所在的层越高,则图像分辨率越低。如下图,level 4的分辨率最低,并且Level 1.....Level4都是Level0经过逐级下采样得到的图像。

pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)) 

2、图像的高斯金字塔

对图像进行下采样,是主要的金字塔。

图像向下采样的函数:pyrDown函数  (尺寸减半)

图像向上采样的函数:pyrUp函数   (尺寸加倍)
注意: pyrDown和pyrUp不是逆操作。

pyrUp函数先扩充为原始图像的2倍,然后新增的行(偶数行)填充0,然后给指定的滤波器进行卷积去估计“丢失”像素的近似值。

pyrDown函数先对原始图像进行高斯内核卷积操作,然后将所有的偶数行和列去掉,会丢失一些信息。

3、高斯不同

把同一张图像在不同参数下做高斯模糊后的结果相减,得到的输出图像,成为高斯不同(DOG)

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

4、函数用法

上采样: 新图像的长宽各为为原始图像长宽的2倍。

pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)) 

下采样:新图像的长宽各位原始图像长宽的1/2

pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2))

两张 图像相减:

subtract(InputArray src1, InputArray src2, OutputArray dst,InputArray mask=noArray(), int dtype=-1);

归一化显示:

normalize(InputArray src,OutputArray dst, double alpha=1, doublebeta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )

 5、代码示例

#include<opencv2\opencv.hpp>
#include<highgui.h>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
	// read image
	Mat src, dst;
	src = imread("C:/Users/qxq/Pictures/image/fox.jpg");

	if (src.empty())
	{
		printf("Could not load image...");
		return -1;
	}
	char INPUT_WIN[] = "input image";
	char OUTPUT_WIN[] = "output image";
	namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, src);

	//图像金字塔,应用:图像融合、重建、特征提取等。

	//上采样
	pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));
	//imshow(INPUT_WIN, dst);

	//降采样
	Mat S_down;
	pyrDown(src, S_down, Size(src.cols / 2, src.rows / 2));
	//imshow(OUTPUT_WIN, S_down);

	//高斯不同
	Mat gray_src,g1, g2, dogImg;
	cvtColor(src, gray_src, CV_BGR2GRAY);
	GaussianBlur(gray_src,g1,Size(3,3),0,0);
	GaussianBlur(g1, g2, Size(3, 3), 0, 0);
	subtract(g1,g2, dogImg, Mat()); //正常情况下,是低的减去高的,g1-g2。
	//将最小最大值放大到0~255,便于观察。
	normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);

	imshow("Dog image", dogImg);


	waitKey(0);
	return 0;
}

6、效果显示

7、附件(当原图过大,可展示下采样后的图像)

//阈值分割
#include<opencv2\opencv.hpp>
#include<highgui.h>
#include<math.h>
#include<iostream>
using namespace std;
using namespace cv;

Mat src;

int main(int argc, char**argv)
{
	const char* path = "C:/Users/qxq/Pictures/Saved Pictures/2.jpg";

	src = cv::imread(path);
	if (src.empty())
	{
		cout << "Load image failed! " << endl;
		return -1;
	}

	//上采样
	Mat upimg,downimg;
	pyrUp(src, upimg, Size(src.cols * 2, src.rows * 2));

	//下采样
	pyrDown(src, downimg, Size(src.cols / 2, src.rows / 2));
	
	/*cv::imwrite("C:/Users/qxq/Pictures/Saved Pictures/2_up.jpg", upimg);
	cv::imwrite("C:/Users/qxq/Pictures/Saved Pictures/2_down.jpg", downimg);*/
	/*cv::imshow("src", src);
	cv::imshow("up_img", upimg);*/
	cv::imshow("down_img", downimg);


	//高斯不同
	Mat gray_src, g1, g2, dogImg;
	cvtColor(downimg, gray_src, CV_BGR2GRAY);//转化为灰度图
	GaussianBlur(gray_src, g1, Size(3, 3), 0, 0);//对灰度图做高斯滤波
	GaussianBlur(g1, g2, Size(3, 3), 0, 0);//再第一次滤波的基础上再做一次滤波
	subtract(g1, g2, dogImg, Mat()); //正常情况下,是低的减去高的,g1-g2。
									 
	normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);//将最小最大值放大到0~255,便于观察。

	imshow("Dog image", dogImg);

	
	waitKey(0);
	return 0;
}

 

  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值