當(dāng)前位置:
首頁 >
差分金字塔
發(fā)布時(shí)間:2023/11/27
27
豆豆
1、原理
DOG金字塔的每1組第i層是由高斯金字塔的每1組第i+1層減每1組第i層得到的。以此類推,逐組逐層生成每一個(gè)差分圖像,所有差分圖像構(gòu)成差分金字塔;每一組在層數(shù)上,DOG金字塔比高斯金字塔少一層。
DOG金字塔的構(gòu)建可以用下圖描述:
2、 源碼實(shí)現(xiàn)
//差分金字塔
//如果直接imshow差分圖會(huì)顯示不出人眼看到的圖像,只有對(duì)這些DOG圖像進(jìn)行歸一化,
//可以很明顯的看到差分圖像所蘊(yùn)含的特征,并且有一些特征是在不同模糊程度、不同
//尺度下都存在的,這些特征正是Sift所要提取的“穩(wěn)定”特征
void siftLou::DogPyramid(const vector<Mat>& gauss_pyr, vector<Mat>& dog_pyr, int octaves)
{int intervals = INTERVALS;for (int o = 0; o < octaves; o++){for (int i = 1; i < intervals + 3; i++){Mat mat;mat=Sub(gauss_pyr[o * (intervals + 3) + i], gauss_pyr[o * (intervals + 3) + i - 1]);dog_pyr.push_back(mat);}}
}
下圖是差分金字塔第一組第0/1層的實(shí)際顯示效果,其實(shí)這里邊包含了大量特征點(diǎn)信息,但是我們?nèi)搜垡呀?jīng)分辨不出來了。
所以想要顯示出人眼識(shí)別的圖像,就要對(duì)DOG圖像進(jìn)行歸一化,下圖是歸一化的圖:
?3、歸一化原理
void cv::normalize(InputArry src,InputOutputArray dst,min,max,int norm_type=NORM_L2,int dtype=-1,InputArray mark=noArry())函數(shù)作用:
歸一化數(shù)據(jù)。該函數(shù)分為范圍歸一化與數(shù)據(jù)值歸一化。(Normalizes the norm or value range of an array.)其實(shí)范圍歸一化和數(shù)值歸一化可以歸為一類,一般來說數(shù)值歸一化是指將數(shù)值歸一到[0,1]區(qū)間上,而范圍歸一化則指將數(shù)值歸一到[a,b]上,a,b為任意值。由此看出,數(shù)值歸一化是范圍歸一化的特例,包含在范圍歸一化中。參數(shù)說明:
src 輸入數(shù)組;
dst 輸出數(shù)組,數(shù)組的大小和原數(shù)組一致;
min 用來規(guī)范值或者規(guī)范范圍,并且是下限;
max 只用來規(guī)范范圍并且是上限,因此只在NORM_MINMAX中起作用;
norm_type 歸一化選擇的數(shù)學(xué)公式類型;
dtype 當(dāng)為負(fù),輸出在大小深度通道數(shù)都等于輸入,當(dāng)為正,輸出只在深度與輸如不同,不同 的地方由dtype決定;
mark 掩碼。選擇感興趣區(qū)域,選定后只能對(duì)該區(qū)域進(jìn)行操作。
對(duì)數(shù)組的歸一化的公式為:
?上式表示:設(shè)置的上限(max)與下限(min)的差除以數(shù)組中的最大值為公因子;
數(shù)組中歸一化后的每一個(gè)值=歸一化前的每一個(gè)值*公因子
示例:
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include<vector>
#include<Eigen/Core>
#include <corecrt_math_defines.h>
using namespace std;
using namespace cv;int main()
{//生成一個(gè)3*4的矩陣Mat M = Mat::eye(3,4,CV_8UC1);M.at<uchar>(2, 3) = 9;Mat m;normalize(M, m, 0, 255, NORM_MINMAX);cout <<"歸一化前數(shù)組:\n" <<M << endl;cout <<"歸一化后數(shù)組:\n" << m << endl;cv::waitKey(0);return 0;
}
?
總結(jié)
- 上一篇: c++中static_cast用法与uc
- 下一篇: ZigBee(CC2530)最小系统PC