opencv 图像金字塔

来源:互联网 发布:高中生学java开发 编辑:程序博客网 时间:2024/06/05 21:01

opencv 图像金字塔

Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔
http://blog.csdn.net/dcrmg/article/details/52561656

图像金字塔
以多分辨率来解释图像的结构,通过对原始图像进行多尺度像素采样的方式,生成N个不同分辨率的图像。把具有最高级别分辨率的图像放在底部,以金字塔形状排列,往上是一系列像素(尺寸)逐渐降低的图像,一直到金字塔的顶部只包含一个像素点的图像,这就构成了传统意义上的图像金字塔

它是一个图像集合,集合中所有的图像都源于同一个原始图像,是通过对原始图像连续降采样获得。是图像多尺度表达的一种,最主要的是用于图像的分割。
图像金字塔中,层级越高,则图像越小,分辨率越低
两种很典型的图像金字塔:
高斯金字塔:向下降采样图像
拉普拉斯金字塔:从低层图像中向上采样重建图像

图像金字塔一般包括二个步骤:
1. 利用低通滤波器平滑图像
2. 对平滑图像进行抽样(采样)
有两种采样方式——上采样(分辨率逐级升高)和下采样(分辨率逐级降低)

`

//Impgroc.hpp => c++
//向下采样
//! smooths and downsamples the image
CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );
//向上采样
//! upsamples and smoothes the image
CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,
const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );

//Imgproc_c.h => c
/*
Smoothes the input image with gaussian kernel and then down-samples it.
dst_width = floor(src_width/2)[+1],
dst_height = floor(src_height/2)[+1]
*/
CVAPI(void) cvPyrDown( const CvArr* src, CvArr* dst,
int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
/*
Up-samples image and smoothes the result with gaussian kernel.
dst_width = src_width*2,
dst_height = src_height*2
*/
CVAPI(void) cvPyrUp( const CvArr* src, CvArr* dst,
int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
分别代表一次采样操作,向下(或者向上)进行相邻层次的金字塔采样,且长宽比基本是不变:
调用pyrDown函数只能降低到原图像尺寸的1/2, 实现过程:
1、高斯平滑处理;用高斯函数生成的核进行滤波;
2、下采样;对前一级图像进行隔行隔列采样得到
调用pyrUp目标图像则为原图像尺寸的2倍,实现过程:
1、将原来的维数扩大一倍,对于增加的部分用0填充;
2、与高斯核做卷积

通道分离:
/* Splits a multi-channel array into the set of single-channel arrays or
extracts particular [color] plane */
//可以从多通道数组中分离提取一个通道
CVAPI(void) cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3 );

改变图像大小:
//! resizes the image
CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
Size dsize, double fx=0, double fy=0,
int interpolation=INTER_LINEAR );
src
源图像
dst
输出图像,目标图像大小可以是任意的大小,可以不保持长宽比率
dsize
dsize与fx和fy必须不能同时为零,dsize和(fx,fy)只需设置其中一个,另外一个置为零即可
1、dsize不为零,fx与fy同时可以为0,
fx,fy会自动计算:fx=dsize.width/src.cols;fy=dsize.height/src.rows
2、dsize为0,fx与fy不同时为0,目标图像的大小是通过这fx、fy两个参数来计算的:
目标图像的宽度为原图像的宽度*fx,
目标图像的高度为原图像的高度*fy;
fx
水平方向的比率
fy
垂直方向的比率
interpolation
删除的像素或者新增的像素值通过interpolation(内插)控制
“`

原创粉丝点击