金字塔原理
图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且通过对原始图像连续降采样获得。
在图像处理中,常常会调整图像大小,最常见的就是放大和缩小。
一个图像金字塔是一系列图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像一个古埃及的金字塔。
高斯金字塔–用来对图像进行降采样
拉普拉斯金字塔–用来重建一张图片根据他的上层降采样图片。
高斯金字塔:
高斯金字塔是从底向上,逐层采样得到。
采样之后图像大小是原始图像MxN的M/2xN/2,就是对原图像删除偶数行和列,得到降采样之后的上一层图片。高斯金子塔的生成过程分为两步:对当前层进行高斯模糊,删除当前层的偶数行与列,即可得到上一层的图像,这样上一层跟下一层对比,都只有它的1/4大小。
高斯不同(difference of Gaussian-DOG)
定义:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同(DOG)。
高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常应用到。
相关API
上采样—放大
降采样–缩小
pyrUp(src,dst,Size(src.cols*2,src.rows*2));生成的图像是原图在宽与高各自放大两倍。
pyrDown(src,dst,Size(src.cols/2,src.rows/2));生成的图像是原图在宽与高各缩小两倍。
相关源码:
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc,char ** argv) { Mat src,dst; Mat src2,dst2; src = imread("1.jpeg"); namedWindow("input window",CV_WINDOW_AUTOSIZE); imshow("input window",src); src2 = imread("2.jpg"); namedWindow("input window1",CV_WINDOW_AUTOSIZE); imshow("input window1",src2); //上采样 //上采样 pyrUp(src,dst,Size(src.cols*2,src.rows*2)); //原理是先做高斯模糊,后做加行处理 imshow("1out",dst); //降采样 pyrDown(src,dst,Size(src.cols/2,src.rows/2)); imshow("2out",dst); //DOG Mat g1,g2,gry_src2,dogImg; cvtColor(src2,gry_src2,CV_BGR2GRAY); GaussianBlur(gry_src2,g1,Size(3,3),0,0); GaussianBlur(g1,g2,Size(3,3),0,0); //高斯模糊 subtract(g1,g2,dogImg,Mat()); //两次高斯模糊的图像相减 低的减去高的 normalize(dogImg,dogImg,255,0,NORM_MINMAX); //图像归一化到0到255空间 imshow("3out",dogImg); waitKey(0); return 0; }
效果:
github下载源码和图片:
https://github.com/MRwangmaomao/OpenCVPyramid-Project.git
————————————————
版权声明:本文为CSDN博主「南山二毛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_16481211/article/details/79597407

