@title
1.高斯金字塔
高斯金字塔的生成过程分为两步:
1)对当前层进行高斯模糊。
2) 删除当前层的偶数行与列。
然后即可得到上一层的图像,上一层只有下一层的1/4大小,而且是逐层得到的,不能隔层生成。
2. DOG高斯不同
DOG-高斯不同:(difference of gaussian) 就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同。
用处:DOG是图像的内在特征,在灰度图像增强、角点检测中经常用到。
其中:
1)高斯正态分布函数定义:
2) 高斯滤波:对一幅图像f(x,y)进行不同参数的高斯滤波计算
3)滤波结果图象相减,得到DOG目标图象
3. 程序实验
包含高斯上采样,降采样,DOG
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("2.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
//创建显示窗口
char INPUT_WIN[] = "input image";
char OUTPUT_WIN[] = "result image";
namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
imshow(INPUT_WIN, src);
//上采样
/*pyrUp(src, dst, Size(src.cols*2, src.rows*2));
imshow(OUTPUT_WIN, dst);*/
//降采样
Mat s_down;
pyrDown(src,s_down, Size(src.cols/2, src.rows/2));
imshow("sample_down", s_down);
//DOG----高斯不同
Mat gray_src, g1, g2, dogImg;
cvtColor(s_down, gray_src, CV_BGR2GRAY);
//两次高斯模糊
GaussianBlur(gray_src,g1, Size(3,3), 0, 0 );
GaussianBlur(g1, g2 ,Size(3,3), 0);
subtract(g1, g2, dogImg, Mat()); //差分图的灰度值比较小,图比较暗。
//归一化显示
normalize(dogImg, dogImg, 255, 0, NORM_MINMAX); //归一化,放到0-255显示。
imshow("DOG_img", dogImg);
waitKey(0);
return 0;
}
4 DOG特征点检测
也常称DOG算子,DOG角点检测,DOG特征点检测。
1)原图加上3个不同参数下的高斯滤波图,相减得到DOG差分图。
2) 求中间图片每个像素与该像素同尺度的8个相邻点以及上下相邻尺度对应的9*2共26个点的极值。一个点如果在DOG空间本层以及上下两层的26个领域中是最大值和最小值时,就认为该点是图像在该尺度下的一个特征点。