日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當(dāng)前位置: 首頁 >

差分金字塔

發(fā)布時(shí)間:2023/11/27 27 豆豆
默认站点 收集整理的這篇文章主要介紹了 差分金字塔 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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é)

以上是默认站点為你收集整理的差分金字塔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網(wǎng)站內(nèi)容還不錯(cuò),歡迎將默认站点推薦給好友。