小言_互联网的博客

在OpenCV里实现高斯差分(DoG)变换

578人阅读  评论(0)

Difference of Gaussian(DOG)是高斯函数的差分。它是可以通过将图像与高斯函数进行卷积得到一幅图像的低通滤波结果,即去噪过程,这里的Gaussian和高斯低通滤波器的高斯一样,是一个函数,即为正态分布函数。同时,它对高斯拉普拉斯LoG的近似,在某一尺度上的特征检测可以通过对两个相邻高斯尺度空间的图像相减,得到DoG的响应值图像。

高斯差分核是两个非归一化的高斯核的差,已知高斯核是可分离的,所以真正实现时,只要将图像与两个卷积核进行卷积,然后做差即可。

高斯平滑函数如下:

两次平滑的差如下:

所以可以写为:

根据公式可以采用下面的代码来计算:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
from scipy import signal

#图片的路径
imgname = "edge1.png"

#读取图片
image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE)

#图片的高度和宽度
h,w = image.shape[:2]
print('imagesize={}-{}'.format(w,h))

#显示原图
cv2.imshow("Image",image)

#算子
sigma=2
K = 1.1
g1 = cv2.GaussianBlur(image, (23,23), sigmaX=sigma,sigmaY=sigma)
g2 = cv2.GaussianBlur(image, (23,23), sigmaX=sigma*K,sigmaY=sigma*K)

DOG = g2 - g1
DOG[DOG>0]=255
DOG[DOG<=0]=0
DOG = DOG.astype(np.uint8)
cv2.imshow("DOG",DOG)

cv2.waitKey(0)
cv2.destroyAllWindows()

结果输出如下:

输入图片

输出图片

https://blog.csdn.net/caimouse/article/details/51749579


转载:https://blog.csdn.net/caimouse/article/details/102226060
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场