轉自 http://blog.csdn.net/abcjennifer/article/details/7639488
DoG (Difference of Gaussian)是灰度圖像增強和角點檢測的方法,其做法較簡單,證明較複雜,具體講解如下:
Difference of Gaussian(DOG)是高斯函數的差分。我們已經知道可以通過將圖像與高斯函數進行卷積得到一幅圖像的低通濾波結果,即去噪過程,這裏的Gaussian和高斯低通濾波器的高斯一樣,是一個函數,即爲正態分佈函數。
那麼difference of Gaussian 即高斯函數差分是兩幅高斯圖像的差,
一維表示:
二維表示:
具體到圖像處理來講,就是將兩幅圖像在不同參數下的高斯濾波結果相減,得到DoG圖。
1. 處理一幅圖像在不同參數下的DoG
- A = Process(Im, 0.3, 0.4, x);
- B = Process(Im, 0.6, 0.7, x);
- a = getExtrema(A, B, C, thresh);
- function [ out_img ] = Process( img, sig1, sig2, size )
是求圖像DoG的結果,兩個高斯平滑參數分別爲sig1和sig2,結果如下:
- A = Process(Im, 0.3, 0.4, x);
- B = Process(Im, 0.6, 0.7, x);
- C = Process(Im, 0.7, 0.8, x);
2. 根據DOG求角點
Theory:DOG三維圖中的最大值和最小值點是角點
X標記當前像素點,綠色的圈標記鄰接像素點,用這個方式,最多檢測26個像素點。X被標記爲特徵點,如果它是所有鄰接像素點的最大值或最小值點。
因此在上一步計算出的A,B,C三個DOG圖中求圖B中是極值的點,並標記(max:1;min:-1)
- a = getExtrema(A, B, C, thresh);
- figure;
- imshow(a, [-1 1]);
黑色爲極小值,白色爲極大值
最後在原圖上予以顯示:
就得到了一幅圖的DOG角點檢測結果。
代碼下載鏈接:http://download.csdn.net/detail/abcjennifer/4363144