图像金字塔——上采样和下采样

在图像处理中,图像的缩放常常会利用到。图像金字塔概念就和图像的缩放相关。如果把正常大小的图片放在金字塔结构的中间,那么金字塔的上部就相当于图片的收缩,金字塔的地步就相当于图片的放大。金字塔结构有两种,分别是高斯金字塔和拉普拉斯金字塔。在本次学习中,接触到的是高斯金字塔,我们把图片收缩叫做下采样,图片放大叫做上采样。相关函数如下:

(1)pyrUp(源Mat对象,目标Mat对象,Size(源对象列数*2,源对象行数*2))//上采样,生成的图像是原图在宽高上各放大1倍。

(2)pyrDown(源Mat对象,目标Mat对象,Size(源对象列数/2,源对象行数/2))//下采样,生成的图像是原图在宽高上各缩小1倍。

随带提一下高斯不同的概念(Difference of Gaussian-DOG):把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到输出图像。高斯不同能够反映图像的内在特征。

(3)subtract(Mat对象1,Mat对象2,目标Mat对象)//把两个图像相减结果赋给目标图像。

(4)normalize(源Mat对象,目标Mat对象,最大值max,最小值min,NORM_MAXMIN)//把图像的像素集合归一化到min~max的区间。

演示代码:

#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
#include<algorithm>

using namespace std;
using namespace cv;



int main()
{
	Mat src,dst_up,dst_down;
	src = imread("1.jpg", 1);
	if (src.empty())
	{
		printf("cannot load!");
		return -1;
	}
	namedWindow("原图");
	imshow("原图", src);
	
	//上采样
	pyrUp(src, dst_up, Size(src.cols * 2, src.rows * 2));
	namedWindow("上采样");
	imshow("上采样", dst_up);

	//下采样
	pyrDown(src, dst_down, Size(src.cols / 2, src.rows / 2));
	namedWindow("下采样");
	imshow("下采样", dst_down);

	//高斯不同
	Mat g1, g2, dogImg;
	GaussianBlur(src, g1, Size(5, 5), 0, 0);
	GaussianBlur(src, g2, Size(5, 5), 11, 11);
	subtract(g1, g2, dogImg);
	//归一化显示
	normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);//因为两个图像的差值肯定不大,看起来一片黑,所以需要把像素扩展到0~255的区间。
	namedWindow("高斯不同");
	imshow("高斯不同", dogImg);

	waitKey(0);
	return 0;
}

演示效果:





猜你喜欢

转载自blog.csdn.net/ZouCharming/article/details/70305904