DoG(Difference of Gaussian)
DoG (Difference of Gaussian)是灰度圖像增強和角點檢測的方法,其做法較簡單,證明較復雜,具體講解如下:
Difference of Gaussian(DOG)是高斯函數的差分。我們已經知道可以通過將圖像與高斯函數進行卷積得到一幅圖像的低通濾波結果,即去噪過程,這里的Gaussian和高斯低通濾波器的高斯一樣,是一個函數,即為正態分布函數。
那么difference of Gaussian 即高斯函數差分是兩幅高斯圖像的差,
一維表示:
二維表示:
具體到圖像處理來講,就是將兩幅圖像在不同參數下的高斯濾波結果相減,得到DoG圖。
- GaussianBlur(img,img_G0,Size(3,3),0);
- GaussianBlur(img_G0,img_G1,Size(3,3),0);
- Mat img_DoG = img_G0 - img_G1;
- normalize(img_DoG,img_DoG,255,0,CV_MINMAX);
Laplacian圖像
計算圖像的拉普拉斯是通過Sobel¶操作計算圖像在x和y方向的二階偏導數的和:
voidLaplacian(InputArray src, OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)¶
當ksize>1使用上述偏導公式計算. 當ksize==1 , 拉普拉斯圖像通過如下 aperture計算:
- Laplacian(img,img_Lp,8,1);
ksize=1,不太明顯,選擇ksize>1時,比較顯著。
圖像金子塔
拉普拉斯金字塔與高斯金字塔是一個圖像集合,集合中的所有圖像都源於一幅圖像,是通過連續下采樣獲得。
高斯金字塔是向下采樣圖像,而拉普拉斯金字塔是向上重建圖像。
高斯金字塔
Down:降采樣(OpenCV里描述成Down,注意也可以說是向上層操作)
從第i層G(i)生成第i+1層G(i+1):首先使用高斯核進行卷積,然后刪除所有偶數行和偶數列,這樣獲得圖像大小僅為上一層的1/4,然后不斷迭代。
- pyrDown(img,img_Down,Size());
Up:(注意不是簡單的降采樣的逆操作)
從第i+1層G(i+1)生成第i層G(i):首先每一維都擴大兩倍,新的行(偶數行)以0填充,然后使用指定的錄波器進行卷積(實際上是在每一維都擴大兩倍的濾波器:此濾波器的所有元素都被規范化為4,而不是1。因為在之前所有插入行的像素值都為0,所以這樣做是合理的)去估計“丟失”的近似值,這樣獲得圖像大小為上一層的4倍。
- pyrUp(img_Down,img_Up,Size());
Laplacian金字塔
高斯金字塔丟失的數據形成了拉普拉斯金子塔,數學公式如下:
L(i)=G(i) - UP(G(i+1))*G(5x5)
OpenCV可以使用:
L(i)=G(i) - PyrUp(G(i+1))
- Mat lp_UpDown = img-img_Up;
from: http://blog.csdn.net/yangtrees/article/details/8309594