Opencv(C++)笔记--图像金字塔

目录

1--图像金字塔的原理

2--图像金字塔的用途

3--Opencv API

3-1--拉普拉斯金字塔上采样

3-2--高斯金字塔下采样

3-3--代码实例

4--参考


1--图像金字塔的原理

        图像金字塔常用于图像缩放(resize)和图像分割当中,不同分辨率的图像以金字塔的形状排列。层级越高,图像越小,分辨率越低;层级越低、图像越大、分辨率越高;

         图像金字塔是一副图像的多尺度表现,上采样得到尺寸较大的图像,分辨率逐渐提高,下采样得到尺寸较小的图像,分辨率逐渐降低;

2--图像金字塔的用途

① 用于特征点提取,赋予特征点尺度不变性特点:

        相同的物体在不同距离下拍摄,在图像上呈现不同尺度的大小。那么在原图中构建图像金字塔,模拟这种不同距离拍摄的现象,由此提取的特征点也具有尺度不变性。

② 用于模板匹配,减少匹配时间,提高效率:

        对模板和待匹配图像分别做图像金字塔,先从金字塔尖的图像开始匹配,由于分辨率较小,所以匹配时间较短,接着在此位置基础上,在下一层该位置周围局部区域继续进行匹配,直到最后一层完成匹配。整体思路为course-to-fine。

③ 用于光流跟踪,解决前后两帧相对运动距离过大的问题。

        在使用光流法进行图像特征点跟踪时,存在由于两帧图像运动过大,导致两帧图像相同的特征点不能被正确跟踪。为解决此问题可以引入图像金字塔,对两帧图像分别构建金字塔,从塔顶图像开始跟踪(例如原图两特征点相差16个像素,不能被跟踪,塔顶图像缩小8倍,那么塔顶的两帧图像的对应特征点对就相差2个像素,可以被跟踪),确定大概位置后,将该位置做为下一层金字塔图像的初值进行跟踪,直到金字塔最后一层。整体思路也可看做course-to-fine。         

3--Opencv API

3-1--拉普拉斯金字塔上采样

cv::pyrUp() 用于拉普拉斯金字塔上采样:

3-2--高斯金字塔下采样

cv::pyrDown() 用于高斯金字塔下采样:

3-3--代码实例

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

int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test1.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::imshow("input", src);

    cv::Mat up_dst, down_dst;
    cv::pyrUp(src, up_dst); // 上采样
    cv::pyrDown(src, down_dst); // 下采样

    cv::imshow("pyrUp", up_dst);
    cv::imshow("pyrDown", down_dst);

    cv::waitKey(0);
    return 0;
}

4--参考

图像金字塔的几种用途

图像金字塔----高斯和拉普拉斯

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值