DOG簡析

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;
}

效果圖
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章