Opencv学习笔记(八):高斯图像金字塔PyrDown,PyrUP

高斯图像金字塔
Last Edit 2013/12/27
PyrDown:缩小过程
PyrUp:    扩大过程
对于大小为w×h的图像I,高斯金字塔Gj 由I的几个分辨率减小的高斯图像Ii(i是下标,下同) 组成
其中,i={0,1,...,j}代表金字塔的级数。 图像Ii 的大小为(w/2i)×(h/2i)。[2i表示2的i次方]
图像Ii 由两步得到。1,高斯平滑处理;用高斯函数生成的核进行滤波;


                                2,下采样;对前一级图像进行隔行隔列采样得到;
Opencv学习笔记(八):高斯图像金字塔PyrDown,PyrUP_第1张图片
Opencv2提供了一个PyrDown来实现高斯金字塔
void pyrDown(InputArray src, 
             OutputArray dst, 
             const Size& dstsize=Size())

关于dstsize,下面是文档中的解释:
dstsize – Size of the destination image. By default, it is computed as Size((src.cols+1)/2, (src.rows+1)/2). But in any case, the following conditions should be satisfied:
|dstsize.width * 2 - src.cols | <2
|dstsize.height * 2 - src.rows| < 2
我们将一个图像利用高斯金字塔形变为其原来的一半。
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include 
using namespace cv;
using namespace std;

int main()
{
	Mat img=imread("D:\\Ccode\\OpenCV_test\\Debug\\lena.jpg");
	Mat dst;
	namedWindow("Original",WINDOW_AUTOSIZE);
	namedWindow("Pyramid",WINDOW_AUTOSIZE);   
	pyrDown(img,dst,Size(img.cols/2,img.rows/2));
	cvMoveWindow("Original",0,0);
	cvMoveWindow("Pyramid",img.cols,img.rows/2);
	imshow("Original",img);
	imshow("Pyramid",dst);	
        waitKey(0);
        return 0;
}

Opencv学习笔记(八):高斯图像金字塔PyrDown,PyrUP_第2张图片
PyrUp的实现过程为:
1)将原来的维数扩大一倍,对于增加的部分用0填充;
2)与下面的矩阵做卷积
Opencv学习笔记(八):高斯图像金字塔PyrDown,PyrUP_第3张图片
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size())



你可能感兴趣的:(Opencv)