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;
}
效果图