Difference of Gaussian(DOG)是高斯函數的差分。我們已經知道可以通過將圖像與高斯函數進行卷積得到一幅圖像的低通濾波結果,即去噪過程,這裏的Gaussian和高斯低通濾波器的高斯一樣,是一個函數,即爲正態分佈函數。
那麼difference of Gaussian 即高斯函數差分是兩幅高斯圖像的差,
一維表示:
二維表示:
opencv實現:
using namespace std;
using namespace cv;
int main(){
Mat img, img_ = imread("1.jpg"),img1,img2;
vector<Point> point_vec;
cvtColor(img_, img, CV_BGR2GRAY);
imshow("img",img);
GaussianBlur(img, img1, Size(3, 3), 0.3,0.4);
GaussianBlur(img1, img2, Size(3, 3), 0.3,0.4);
Mat img_DOG = img2 - img;
normalize(img_DOG, img_DOG, 0, 255,CV_MINMAX);
imshow("img_DOG", img_DOG);
for (int i = 0; i < img.rows; i++){
for (int j = 0; j < img.cols; j++){
if ((float)img_DOG.at<uchar>(i, j) != 0){
point_vec.push_back(Point(j, i));
}
}
}
vector<Point>::iterator it;
for (it = point_vec.begin(); it != point_vec.end(); it++){
circle(img_, *it, 0.5, Scalar(255, 255, 0));
}
imshow("old_img", img_);
waitKey(0);
return 0;
}
效果圖