\tutorial_code\ImgProc\Pyramids.cpp

来源:互联网 发布:建站abc代理登录 编辑:程序博客网 时间:2024/04/29 04:16





【12】Pyramids.cpp

\OpenCV2.3.1\opencv\samples\cpp\tutorial_code\ImgProc


图像金字塔

当我们需要将图像转换到另一个尺寸的时候, 有两种可能:
放大 图像 或者
缩小 图像。

一个图像金字塔是一系列图像的集合
所有图像来源于同一张原始图像
通过梯次向下采样获得,
直到达到某个终止条件才停止采样。

高斯金字塔

想想金字塔为一层一层的图像,层级越高,图像越小。




每一层都按从下到上的次序编号。

为了获取层级为 i+1 的金字塔图像,我们采用如下方法:

与高斯内核卷积:




将所有偶数行和列去除。

显而易见,结果图像只有原图的四分之一。通过对输入图像 (原始图像) 不停迭代以上步骤就会得到整个金字塔。

以上过程描述了对图像的向下采样,如果将图像变大呢?:

首先,将图像在每个方向扩大为原来的两倍,新增的行和列以0填充

使用先前同样的内核(乘以4)与放大后的图像卷积,获得 “新增像素” 的近似值。



Note 我们向下采样缩小图像的时候, 我们实际上 丢失 了一些信息。


void pyrUp(const Mat& src, Mat& dst, const Size& dstsize=Size())

void pyrDown(const Mat& src, Mat& dst, const Size& dstsize=Size())

src: 当前图像。
dst: 目的图像( 显示图像,为输入图像的两倍)
Size( tmp.cols*2, tmp.rows*2 ) : 目的图像大小, 既然我们是向上采样, pyrUp 期待一个两倍于输入图像( tmp )的大小。

注意输入图像的大小(在两个方向)必须是2的冥,否则,将会显示错误。


尽管OpenCV 几何变换 部分提供了一个真正意义上的图像缩放函数(resize, 在以后的教程中会学到),不过在本篇我们首先学习一下使用 图像金字塔 来做图像缩放, 图像金字塔是视觉运用中广泛采用的一项技术。




沒錯啦,就是我,會變大變小的那個。




是不是很正太




噢漏,毀容了。


例程中

将输入图像 tmp 更新为当前显示图像, 这样后续操作将作用于更新后的图像。

tmp = dst;

首先按两次 ‘d’ 连续两次向下采样 pyrDown ,由于我们缩小了图像,我们也因此丢失了一些信息。通过连续按两次 ‘u’ 向上采样两次 pyrUp ,很明显图像有些失真。




原创粉丝点击