飞道的博客

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

381人阅读  评论(0)

目录

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--代码实例


  
  1. #include <opencv2/opencv.hpp>
  2. # include<cstdio>
  3. int main(int argc, char** argv){
  4. cv::Mat src;
  5. src = cv:: imread( "C:/Users/Liujinfu/Desktop/opencv_bilibili/test1.jpg");
  6. if (src. empty()){
  7. printf( "could not load image..\n");
  8. return -1;
  9. }
  10. cv:: imshow( "input", src);
  11. cv::Mat up_dst, down_dst;
  12. cv:: pyrUp(src, up_dst); // 上采样
  13. cv:: pyrDown(src, down_dst); // 下采样
  14. cv:: imshow( "pyrUp", up_dst);
  15. cv:: imshow( "pyrDown", down_dst);
  16. cv:: waitKey( 0);
  17. return 0;
  18. }

4--参考

图像金字塔的几种用途

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


转载:https://blog.csdn.net/weixin_43863869/article/details/128366238
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场