OpenCV学习笔记-图像金字塔

发布时间:2017-2-22 18:49:02 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"OpenCV学习笔记-图像金字塔",主要涉及到OpenCV学习笔记-图像金字塔方面的内容,对于OpenCV学习笔记-图像金字塔感兴趣的同学可以参考一下。

1.       图像的尺度空间 图像的尺度空间表达指的是图像在所有尺度下的描述,因为尺度空间很多处理算子与哺乳动物的视网膜和视觉皮层最外层记录的感受域剖面有着高度的相似性,所以,尺度空间理论经常与生物视觉相关联。 2.       图像金字塔 提到信号多尺度描述,直观上人们很容易想到信号金字塔。金字塔的确是图像多尺度表示的主要形式。图像金字塔是以多分辨率来解释图像的一种有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。如下图所示。    图像金字塔化一般包括二个步骤:1.利用低通滤波器平滑图像2,对平滑图像进行抽样(比如下2采样),从而得到一系列尺寸缩小的图像。  平滑图像经常使用的低通滤波器是高斯滤波器,因此用高斯平滑得到的金字塔图像通常也叫做高斯金字塔。Koenderink、Lindeberg、Florack等人用精确的数学形式通过不同途径都证明了高斯核是实现尺度变换的唯一线性核。并且满足平移不变性、半群结构、非增局部极值、尺度不变性和旋转不变形等性质。 图像金字塔所用函数为: [cpp] view plaincopy PyrDown   图像的下采样   void cvPyrDown( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );   src   输入图像.   dst   输出图像, 宽度和高度应是输入图像的一半 ,传入前必须已经完成初始化   filter   卷积滤波器的类型,目前仅支持 CV_GAUSSIAN_5x5   函数 cvPyrDown 使用 Gaussian 金字塔分解对输入图像向下采样。首先它对输入图像用指定滤波器进行卷积,然后通过拒绝偶数的行与列来下采样图像。   [编辑]   PyrUp   图像的上采样   void cvPyrUp( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );   src   输入图像.   dst   输出图像, 宽度和高度应是输入图像的2倍   filter   卷积滤波器的类型,目前仅支持 CV_GAUSSIAN_5x5   函数 cvPyrUp 使用Gaussian 金字塔分解对输入图像向上采样。首先通过在图像中插入 0 偶数行和偶数列,然后对得到的图像用指定的滤波器进行高斯卷积,其中滤波器乘以4做插值。所以输出图像是输入图像的 4 倍大小。(hunnish: 原理不清楚,尚待探讨)   实现例题为: [cpp] view plaincopy #include "StdAfx.h"   #include "highgui.h"     #include"cv.h"        //superdont   //blog.csdn.net/superdont   int main(int argc,char ** argv)     {         IplImage * src = cvLoadImage("guagua.bmp");         IplImage * result1 = cvCreateImage(             cvSize( src->width/2, src->height/2 ),             src->depth,             src->nChannels             );         cvPyrDown( src, result1,CV_GAUSSIAN_5x5);         IplImage * result2 = cvCreateImage(             cvSize( src->width*2, src->height*2 ),             src->depth,             src->nChannels             );         cvPyrUp( src, result2,CV_GAUSSIAN_5x5);         cvNamedWindow("source",1);       cvShowImage("source",src);       cvNamedWindow(  "PyrDown" ,1);         cvShowImage( "PyrDown", result1);         cvNamedWindow(  "PyrUp" ,1);         cvShowImage( "PyrUp",result2);         cvWaitKey(0);         cvReleaseImage(&src);        cvReleaseImage(&result1);         cvReleaseImage(&result2);         cvDestroyAllWindows();         return 0;     }     运行结果为:

上一篇:我的vimrc文件
下一篇:js求最大公约数

相关文章

相关评论