掌握

1、图像金字塔概念;
2、采样API;
3、代码演示;

图像金字塔概念

1、如下图,图像金子塔从上到下,分辨率依次提高,图像采样越多,分辨率越高;
2、上采样:分辨率提高的采样,得到的图像宽高是原来图像的2倍;图像金子塔中对应图像从上到下;图像放大(zoom in),图像大小改变(变大);
3、降采样:分辨率降低的采样,得到的图像宽高是原来图像的1/2,图像金字塔中对应图像从下到上;图像缩小(zoom out)
4、通过图像金字塔上采样,降采样产生一系列不同分辨率的图片,然后在不同的尺寸空间寻找图像对应的特征,图像金字塔可以保证图像的特征一致存在;
5、一个图像金子塔由一系列的图像组成,最下方图像最大,顶层图像最小;图像金子塔在图像融合,重建,特征提取上都有重要意义;

图像金字塔分类

1、高斯金子塔–用来对图像进行降采样
- 高斯金字塔从底向上,逐层降采样得到(不能越级);
- 降采样后图像宽高变为原来1/2,图像大小变为原来1/4,删除其中的偶数行与偶数列;
- 高斯金子塔生成步骤:
1、高斯模糊:GaussianBlur();
2、删除当前的偶数行与列;
2、高斯不同(Difference of Gaussian-DOG)
①定义: 把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同(DOG);
②高斯不同是图像的内在特征,在灰度图像增强,角点检测中经常用到;
3、拉普拉斯金字塔-用来重建一张图片根据它的上层降采样图片;

相关API

1、上采样:cv::pyrUp --zoom in 放大;
2、降采样:cv::pyrDown–zoom out 缩小;

//生成图像宽高各放大2倍
pyrUp(Mat src , Mat dest , Size(src.cols * 2 , src.rows * 2));
//生成图像宽高各缩小1/2
pyrDown(Mat src, Mat dest , Size(src.cols/2 , src.rows/2));

归一化函数:normalize():

Code

思路:通过对图像上采样和降采样,得到一系列的图片组成高斯金字塔,相邻图片做减法得到高斯不同,归一化显示高斯不同的图片(高斯不同得到的图像像素值很低,图像很暗);

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
   
	Mat src = imread("C:\\Users\\hello\\Desktop\\2.jpg");
	Mat dst;
	if (src.empty())
	{
   
		cout << "could not load the image...\n";
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);
	
	char OUTPUT_WIN[] = "sample up";
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	//上采样;
	pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));
	imshow(OUTPUT_WIN, dst);
	//降采样
	Mat s_down;
	pyrDown(src, s_down, Size(src.cols / 2, src.rows / 2));
	imshow("sample down", s_down);
	//高斯不同 得到高斯金子塔后,对每层图像进行高斯模糊,做差得到高斯不同
	Mat graysrc,g1, g2,dogImg; 
	cvtColor(src, graysrc, CV_BGR2GRAY);
	GaussianBlur(graysrc, g1, Size(5, 5), 0, 0);//sigma根据算法自动生成
	GaussianBlur(g1, g2, Size(5, 5), 0, 0);  //叠代高斯模糊
	//两次高斯模糊做差得到高斯不同
	subtract(g1, g2, dogImg,Mat());  //图像做减法得到高斯不同(分叉图像)
	//归一化显示
	normalize(dogImg, dogImg, 255, 0,NORM_MINMAX);  //将图像从0-1之间变换到0-255之间 adaptivethreshold();
	imshow("DOG Image", dogImg); //高斯不同得到的值很低,图像很暗

	waitKey(0);
	return 0;
}

效果

灰度图像: