往下和往上,图像的宽高是原来的一倍和一半
图像金字塔
我们在图像处理中常常会调整图像大小,最常见的就是放大和缩小操作。一个图像金字塔是一系列图像的组合,最底下图像尺寸最大,最顶端图像尺寸最小,从空间上往下看就像一个金字塔。
图像处理当中最常见的就是利用图像金字塔产生一系列不同分辨率图像,然后在不同尺度空间去寻找图像对应的特征,因为我们输入的图像我们不知道是什么样子,而图像金字塔可以保证图像特征存在。
常见opencv金字塔
- 高斯金字塔——用来对图像进行降采样
- 拉普拉斯金字塔——用来重建一张图片,根据他的上层图像降采样图片
高斯金字塔
从底像上,逐层降采样得到。必须是逐层采用,不能隔层采用1/4。
降采样之后图像大小是原来的1/2 x 1/2,就是对原图像删除偶数行与列。
高斯金字塔生成过程分为两步:
- 对当前层进行高斯模糊
- 删除当前层的行与列
高斯不同DOG
就是把一张图像在不同参数下做高斯模糊之后的结果相减,得到输出图像。
高斯不同是图像的内在特征,在灰度图像增强,角点检测中经常用到。
- 上采样
pyrUp(Mat src,Mat dst,Size(src.cols*2,src.rows*2))
- 降采样
pyrDown(Mat src,Mat dst,Size(src.cols/2,src.rows/2))
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
Mat src, dst;
int main(int argc, int ** argv)
{
src = imread("F:/cat.png");
if (!src.data) {
printf("无法加载图片\n");
return -1;
}
namedWindow("input img", CV_WINDOW_AUTOSIZE);
namedWindow("output img", CV_WINDOW_AUTOSIZE);
imshow("input img", src);
//上采样
pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));
imshow("上采样", dst);
//降采样
Mat dst_;
pyrDown(src, dst_, Size(src.cols / 2, src.rows / 2));
imshow("降采样", dst_);
//DOG
Mat gray_src, g1, g2, catImg;
cvtColor(src, gray_src, CV_BGR2GRAY);
GaussianBlur(gray_src, g1, Size(3, 3), 0, 0);
GaussianBlur(g1, g2, Size(3, 3), 0, 0);
subtract(g1, g2, catImg, Mat());
normalize(catImg, catImg, 255, 0, NORM_MINMAX);
imshow("DOG", catImg);
waitKey(0);
return 0;
}
输出结果演示
从上面可以看到上采样和降采样分别提高和降低了图像的分辨率,高斯不同处理结果显示了图像的内在特征。