首页 > 其他分享 >图像金字塔从理论到实践专题

图像金字塔从理论到实践专题

时间:2022-10-05 21:01:16浏览次数:85  
标签:src 专题 cols dest1 rows 图像 金字塔


1、资源搜索

​图像金字塔-百度百科​

​【OpenCV学习笔记】之图像金字塔(Image Pyramid)​

​高斯金字塔与拉普拉斯金字塔​

​数字图像处理(21): 图像金字塔(高斯金字塔 与 拉普拉斯金字塔)​

2、本人总结

        在讲解图像金字塔相关知识的时候,我还是首先考虑一个问题,为什么会出现图像金字塔这个概念。我们在对一张图像进行处理的时候,计算机不像我们人眼一看,一看就知道这里面含有什么物体。所以这时候我们需要把图像中一些重要的信息提取出来,然后在让计算机去理解。就好比我们在教小孩子知识的时候,往往就是让复杂问题简单化,来帮助他更快的理解。因此,要提取图像中有用的信息,就涉及到金字塔中一个重要的概念拉普拉斯金字塔,来得到图像的高频信息在比如我们人类在看一样东西的时候,只要在人眼可视的范围内,无论这个物体放到多远,我们都能很精确知道这个物体是什么。但是计算机要认识这个物体,你需要把这个物体在远处是什么样子、近处是什么样子,都要清清楚楚的告诉它一边,而从单张图像实现图像的远近,就要用到金字塔中一个重要的概念高斯金字塔。上面列举的例子,只是图像金字塔中的几个可能的应用,它还可以用到很多具体的图像处理中,例如图像融合、光流、SIFT等等,后面有时间的话,我会把概念一一讲解。

2.1 尺度变化

       尺度变化即实现图像分辨率大小的变化,在OpenCV中使用的函数是resize函数。其中,在对图像缩小处理的时候,一般采用的CV_INTER_AERA(区域插值)的方法。在对图像放大的使用一般采用的是CV_INTER_LINEAR(线性插值)

2.2 图像金字塔

      图像金字塔实现了多尺度的表达,金字塔的底层为高分辨率的原始图像,高层为了低分辨率图像,而且层越高图像的分辨率越小。主要使用在图像分割、图像压缩、匹配等方向。其中,图像金字塔中比较常见的就是高斯金字塔拉普拉斯金字塔

     高斯金字塔:用来进行向上/向下采样,是主要的图像金字塔。

     拉普拉斯金字塔:在金字塔低层图像重建上层未采样图像,在数字图像处理中用来预测残差,对图像进行最大程度的还原,与高斯金字塔配合使用。

图像金字塔从理论到实践专题_OpenCV

      两者的主要区别:高斯金字塔是在原始图像的基础上,对图像进行下采样,图像的分辨率越来越低;拉普拉斯金字塔则是从金字塔的底层向上采样来重建图像。

2.3 高斯金字塔

2.3.1 图像下采样:缩小图像

对图像进行下采样,一般由两步实现:对图像进行高斯卷积核处理(高斯滤波);删除所有的偶数行和列;

图像金字塔从理论到实践专题_高斯金字塔_02

根据上图可以看到,图像的分辨率一开始是M X N,经过一次操作后图像的分辨率变为M/2 X N/2,后面以此类推。

图像金字塔从理论到实践专题_图像金字塔_03

注:因为每次在进行下采样的时候,都会减少行列,因此图像的信息不断丢失。

2.3.2 图像下采样OpenCV实现下采样

(1)源代码

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
Mat src, dest1, dest2, show;
src = imread("0.jpg");
//降采样
pyrDown(src, dest1, Size(src.cols / 2, src.rows / 2));
pyrDown(dest1, dest2, Size(dest1.cols / 2, dest1.rows / 2));
namedWindow("image", CV_WINDOW_AUTOSIZE);
show.create(src.rows, src.cols + dest1.cols + dest2.cols, CV_8UC3);
src.copyTo(show(Rect(0, 0, src.cols, src.rows)));
dest1.copyTo(show(Rect(src.cols, 0, dest1.cols, dest1.rows)));
dest2.copyTo(show(Rect(src.cols + dest1.cols, 0, dest2.cols, dest2.rows)));
imshow("image", show);
cvWaitKey();
}

(2)降采样效果图

图像金字塔从理论到实践专题_#include_04

2.3.3 图像上采样:放大图像

        图像进行上采样说白了就是不断的放大图像,每进行一次处理,图像的行和宽都会放大原来的一倍。那么放大的像素怎么来的呢,一般都是在要放大图像中添加新增的行和列,均用0作为填充

图像金字塔从理论到实践专题_高斯金字塔_05

关于行列中填充的实现:

图像金字塔从理论到实践专题_图像金字塔_06

请注意:我们进行的上采样和下采样的过程是不可逆的,其实不说你也可以想到,每次下采样都会丢失数据,所以即使在进行上采样,丢失的数据也不会回来。

2.3.3 图像上采样:OpenCV实现

(1)源代码

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
Mat src, dest1, dest2, show;
src = imread("1.jpg");
//降采样
pyrUp(src, dest1, Size(src.cols * 2, src.rows * 2));
pyrUp(dest1, dest2, Size(dest1.cols * 2, dest1.rows * 2));
namedWindow("image", CV_WINDOW_AUTOSIZE);
show.create(dest2.rows, src.cols + dest1.cols + dest2.cols, CV_8UC3);
src.copyTo(show(Rect(0, 0, src.cols, src.rows)));
dest1.copyTo(show(Rect(src.cols, 0, dest1.cols, dest1.rows)));
dest2.copyTo(show(Rect(src.cols + dest1.cols, 0, dest2.cols, dest2.rows)));
imwrite("./1.jpg", dest2);
imshow("image", show);
cvWaitKey();
}

(2)效果图

图像金字塔从理论到实践专题_图像金字塔_07

2.4 拉普拉斯金字塔

2.4.1 基础过程

其实拉普拉斯金字塔是在高斯金字塔的基础上,实现的新金字塔。拉普拉斯金字塔的表达式:

图像金字塔从理论到实践专题_高斯金字塔_08

下面我们通过两个流程图来进行分析:

图像金字塔从理论到实践专题_图像金字塔_09

        说明:我们可以看到首先对原始图像进行高斯金字塔,然后在最顶层开始,对图像进行上采样。将上采样后的图像与当前层对应的高斯层图像进行做差,来得到图像的轮廓即高频信息。上面这个过程称为“拉普拉斯金字塔”操作。

图像金字塔从理论到实践专题_图像金字塔_10

图像金字塔从理论到实践专题_高斯金字塔_11

        上面两幅图像,通过将高斯金字塔和拉普拉斯金字塔整合,得到不同的图像。首先还是先对图像进行高斯金字塔处理,之后经过拉普拉斯金字塔得到高频信息,将高频信息与经过高斯上采样来的同层图像来合成一张图像。

2.4.2 拉普拉斯金字塔OpenCV实现

(1)源代码

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
Mat src, dest1, dest2, show;
Mat dest1Up, dest2Up;
Mat laplaceSrc, laplaceDest;

src = imread("0.jpg");
//降采样
pyrDown(src, dest1, Size(src.cols / 2, src.rows / 2));
pyrDown(dest1, dest2, Size(dest1.cols / 2, dest1.rows / 2));
namedWindow("image", CV_WINDOW_AUTOSIZE);

pyrUp(dest2, dest2Up, Size(dest2.cols * 2, dest2.rows * 2));
pyrUp(dest1, dest1Up, Size(dest1.cols * 2, dest1.rows * 2));


show.create(src.rows * 3, src.cols + dest1.cols, CV_8UC3);
laplaceSrc = src - dest1Up;
laplaceDest = dest1 - dest2Up;

src.copyTo(show(Rect(0, 0, src.cols, src.rows)));
dest1Up.copyTo(show(Rect(0, src.rows, dest1Up.cols, dest1Up.rows)));
laplaceSrc.copyTo(show(Rect(0, src.rows + dest1Up.rows, laplaceSrc.cols, laplaceSrc.rows)));

dest1.copyTo(show(Rect(src.cols, 0, dest1.cols, dest1.rows)));
dest2Up.copyTo(show(Rect(src.cols, dest1.rows, dest2Up.cols, dest2Up.rows)));
laplaceDest.copyTo(show(Rect(src.cols, dest1.rows + dest2Up.rows, laplaceDest.cols, laplaceDest.rows)));

imshow("image", show);
cvWaitKey();
}

(2)效果图

图像金字塔从理论到实践专题_高斯金字塔_12

更多《计算机视觉与图形学》知识,可关注下方公众号:

图像金字塔从理论到实践专题_图像金字塔_13

 

标签:src,专题,cols,dest1,rows,图像,金字塔
From: https://blog.51cto.com/u_15717531/5732923

相关文章

  • 光流算法从理论到实践专题3
    1、资源搜索光流法:Farneback图像分析之光流之经典光流(七)--Brox算法(DeepFlow)光流算法从理论到实践专题1光流算法从理论到实践专题2Farneback光流算法详解与calcOpticalFlow......
  • Docker专题-Linux下Docker安装及卸载
    ​​学习资料链接​​一、Docker安装1.选择国内的云服务商,这里选择阿里云为例curl-sSLhttp://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet......
  • 正则化从理论到实践专题
    1、资料搜集​​机器学习之正则化(Regularization)​​(读者反馈很好)​​史上最全面的正则化技术总结与分析--part1​​​​史上最全面的正则化技术总结与分析--part2​​​​......
  • 光流算法从理论到实践专题2
    1、资料搜索​​总结:光流--LK光流--基于金字塔分层的LK光流--中值流​​​​光流算法从理论到实践专题1​​2、本人总结    我在“​​光流算法从理论到实践专题1​......
  • 计算机视觉与图形学-神经渲染专题-动态场景下的时序视图合成
    在低计算设备上渲染高帧速率视频的问题可以通过定期预测未来帧来解决,以增强虚拟现实应用程序中的用户体验。这是通过时间视图合成(TVS)问题来研究的,其目标是在给定前一帧以及......
  • 图论专题-学习笔记:树上启发式合并(dsu on tree)
    目录1.前言2.详解3.总结1.前言树上启发式合并(dsuontree),是一种类似于启发式合并的方式解决关于部分子树内问题的算法,一般都是什么子树内颜色个数等等的。前置知识:......
  • group by 专题
    1.涉及“最多/最大”,即比其他所有(all)都大(>=):常和havingcount()搭配,作为一个判断条件;还可搭配max(),all()。力扣586:selectcustomer_numberfromOrdersgroupby......
  • 基于图像的单目三维网格重建
    代码地址:https://github.com/ShichenLiu/SoftRas论文题目:SoftRasterizer:ADifferentiableRendererforImage-based3DReasoning(CVPR2019)概述渲染通过模拟图像形成的......
  • DP专题
    分治优化DP分治优化1D/1Ddp对于一类\[f(x)=\min_{k=y}^{x-1}w(l,r)\]即所有\(w(l,r)\)事先已知,且\(f(x)\)满足决策单调性(即\(w(l,r)\)满足区间包含单......
  • 基于图像的三维物体重建:在深度学习时代的最新技术和趋势之人脸重建和场景分析
    1.三维人脸重建基于精细密集图像的人脸三维重建是计算机视觉和计算机图形学中一个长期存在的问题,其目标是恢复人脸的形状、姿态、表情、皮肤反射率和更精细的表面细节。最近......