将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低
图像金字塔有两种:高斯金字塔和拉普拉斯金字塔。
高斯金字塔用于下采样,从下到上,逐层降采样。
高斯金字塔(下采样)实现需两步:
(1)对当前层进行高斯模糊
(2)删除当前层的偶数行和偶数列。
下采样会使得图片质量下降,就是图片缩小,使用PryDown函数。
上采样使用PryUp函数
上、下采样都存在一个严重的问题,那就是图像变模糊了,因为缩放的过程中发生了信息丢失的问题。
高斯不同(Difference of Gaussian–DOG)
同一图像在不同参数下做奥斯模糊后的结果相减。通常在灰度图像增强和角点检测中应用。
以下实例中,做了高斯不同之后,看得不太清楚,因此又做了一个归一化。
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv) {
Mat src, dst;
src = imread("d:/02.png");
if (src.empty()) {
cout << "not load..." << endl;
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
namedWindow("output", WINDOW_AUTOSIZE);
imshow("input", src);
//pyrUp(src, dst, Size(src.cols * 2, src.rows * 2));//上采样
pyrDown(src, dst, Size(src.cols / 2, src.rows / 2));//下采样
imshow("output", dst);
//高斯模糊,高斯不同DOG
Mat gray_src, m1, m2,dogimg;
cvtColor(src, gray_src, CV_BGR2GRAY);
GaussianBlur(gray_src, m1, Size(3, 3), 0, 0);//高斯模糊
GaussianBlur(m1, m2, Size(3, 3), 0, 0);//再次高斯模糊
subtract(m1, m2, dogimg, Mat());//两幅图相减
normalize(dogimg, dogimg, 255, 0, NORM_MINMAX);//归一化
imshow("dog", dogimg);
waitKey(0);
return 0;
}