当前位置:网站首页 > 技术博客 > 正文

尺度空间安全吗



高斯 差分 算子

(Difference of Gaussian,

DoG

)是一种常用的边缘检测算法。它是通过对图像进行

高斯

滤波后,计算不同

尺度

下的

高斯

滤波结果

之间

异来实现的。具体步骤如下:

1. 对原始图像进行

高斯

滤波,得到不同

尺度

下的

高斯

模糊图像;

2. 计算相邻两个

尺度

下的

高斯

模糊图像之

,得到一组

差分

图像;

3. 对每个

差分

图像进行非极大值抑制,得到一组非极大值抑制图像;

4. 对所有非极大值抑制图像进行二值化处理,得到一组二值化图像;

5. 将所有二值化图像进行叠加,得到最终的边缘检测结果。

以下是Python实现

高斯 差分

边缘检测

算子

的代码:

```python

import cv2

import numpy as np

# 读取图像并加上

高斯

噪声

img = cv2.imread('lena.jpg', 0)

img = cv2.GaussianBlur(img, (5, 5), 0)

img = img + np.random.normal(0, 25, img.shape)

# 定义

高斯 差分

函数

def

DoG

(img, ksize, sigma1, sigma2):

g1 = cv2.GaussianBlur(img, ksize, sigma1)

g2 = cv2.GaussianBlur(img, ksize, sigma2)

return g1 - g2

# 计算

高斯 差分

图像

dog

1 =

DoG

(img, (5, 5), 1, 2)

dog

2 =

DoG

(img, (5, 5), 2, 4)

dog

3 =

DoG

(img, (5, 5), 4, 8)

# 非极大值抑制

def non_max_suppression(img):

h, w = img.shape

out = np.zeros((h, w), dtype=np.float32)

for y in range(1, h-1):

for x in range(1, w-1):

dx = img[y, x+1] - img[y, x-1]

dy = img[y+1, x] - img[y-1, x]

gradient = np.sqrt(dx2 + dy2)

if gradient == 0:

out[y, x] = 0

else:

angle = np.rad2deg(np.arctan(dy/dx))

if angle < 0:

angle += 180

if (angle <= 22.5) or (angle > 157.5):

if (img[y, x] >= img[y, x+1]) and (img[y, x] >= img[y, x-1]):

out[y, x] = img[y, x]

elif (22.5 < angle <= 67.5):

if (img[y, x] >= img[y-1, x+1]) and (img[y, x] >= img[y+1, x-1]):

out[y, x] = img[y, x]

elif (67.5 < angle <= 112.5):

if (img[y, x] >= img[y-1, x]) and (img[y, x] >= img[y+1, x]):

out[y, x] = img[y, x]

else:

if (img[y, x] >= img[y-1, x-1]) and (img[y, x] >= img[y+1, x+1]):

out[y, x] = img[y, x]

return out

# 非极大值抑制图像

nms1 = non_max_suppression(

dog

1)

nms2 = non_max_suppression(

dog

2)

nms3 = non_max_suppression(

dog

3)

# 二值化处理

th1 = cv2.threshold(nms1, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

th2 = cv2.threshold(nms2, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

th3 = cv2.threshold(nms3, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

# 叠加所有二值化图像

result = th1 + th2 + th3

# 显示结果

cv2.imshow('result', result)

cv2.waitKey(0)

cv2.destroyAllWindows()


                            

  • 上一篇: 何为spi接口?
  • 下一篇: 溢出内容隐藏
  • 版权声明


    相关文章:

  • 何为spi接口?2024-12-07 15:30:03
  • 密码学基础教程2024-12-07 15:30:03
  • 2020公共dns排行2024-12-07 15:30:03
  • 异或运算公式用法2024-12-07 15:30:03
  • fstab uuid挂载2024-12-07 15:30:03
  • 溢出内容隐藏2024-12-07 15:30:03
  • python yaml.load2024-12-07 15:30:03
  • tls prf2024-12-07 15:30:03
  • urllib2和urllib3的区别2024-12-07 15:30:03
  • ps手机破解版软件下载2024-12-07 15:30:03