1. 概念
图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。
图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
2. 分类
2.1 高斯金字塔(Gaussian pyramid)
- 从下往上,对图像进行高斯卷积(高斯滤波/模糊);
- 删除偶数行和偶数列(下采样)
2.2 拉普拉斯金字塔(Laplacian pyramid)
- 先将图像每个方向放大至原来的两倍(上采样),新增的行和列以0填充
- 对图像进行高斯卷积(高斯滤波)
- 用下一层的高分辨率图像减去高斯卷积后的图像
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
Mat src, dst;
char IPNPUT_WIN[] = "input image";
char OUTPUT_WIN[] = "output image";
int main(int argc, char** argv)
{
src = imread("F:\\yb.jpg");
if (src.empty())
{
printf("could not load image src...\n");
return -1;
}
//pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));//上采样
pyrDown(src, dst, Size(src.cols /2, src.rows / 2));//降采样
namedWindow(IPNPUT_WIN, WINDOW_AUTOSIZE);
imshow(IPNPUT_WIN, src);
namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);
imshow(OUTPUT_WIN, dst);
//GOG
Mat graysrc, g1, g2, dogImg;
cvtColor(dst, graysrc,COLOR_BGR2GRAY);//转为gray计算
GaussianBlur(graysrc,g1, Size(5,5),0,0);
//GaussianBlur(dst, g1, Size(7, 7), 0, 0);//RGB
GaussianBlur(g1, g2, Size(7, 7), 0, 0);
subtract(g1, g2, dogImg,Mat());//g1-g2=dogImg 必须是低减高
normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);//归一化显示
imshow("dogImg", dogImg);
waitKey(0);
return 0;
}
原图
结果(注意图像比例关系)
参考文献:
[1]http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/pyramids/pyramids.html
[2]https://mp.weixin.qq.com/s?__biz=MzU1MTgxNjQyMg==&mid=2247483835&idx=1&sn=d473d9ddaf22fc2a9f7245189ec16b0d&chksm=fb8adc32ccfd5524e7874dcaf50fc541a379d2de08cbfacfe717f659bf7dd0958651293448f9&scene=21#wechat_redirect