数字图像处理100问—41 Canny 边缘检测:第一步——边缘强度

本文介绍了Canny边缘检测的基础步骤,包括图像灰度化、高斯滤波、Sobel滤波及边缘梯度计算。通过Python实现,详细展示了如何进行图像的预处理和边缘检测,为后续的非极大值抑制和阈值处理奠定基础。

提示:内容整理自:https://github.com/gzr2017/ImageProcessing100Wen
CV小白从0开始学数字图像处理

41 Canny 边缘检测:第一步——边缘强度

问题41至问题43是边缘检测方法中的一种——Canny 边缘检测法的理论介绍。

  1. 使用高斯滤波;
  2. 在x方向和y方向上使用 Sobel 滤波器,在此之上求出边缘的强度和边缘的梯度;
  3. 对梯度幅值进行非极大值抑制(Non-maximum suppression)来使边缘变得更细;
  4. 使用滞后阈值来对阈值进行处理。

上面就是图像边缘检测的方法了。在这里我们先完成第一步和第二步。按照以下步骤进行处理:

  1. 将图像进行灰度化处理;
  2. 将图像进行高斯滤波(5x 5,s=1.4);
  3. 在x方向和y方向上使用 Sobel 滤波器,在此之上求出边缘梯度fx和fy。边缘梯度可以按照下式求得:
梯度幅值 edge = sqrt(fx^2 + fy^2)
梯度方向 tan = arctan(fy / fx)
  1. 使用下面的公式将梯度方向量化:
angle = {
   
      0  (if -0.4142 < tan <= 0.4142)
           45  (if  0.4142 < tan < 2.4142)
           90  (if  |tan| >= 2.4142)
          135  (if -2.4142 < tan <= -0.4142)

代码如下:

1.引入库

CV2计算机视觉库

import cv2
import numpy as np
import matplotlib.pyplot as plt

2.读入数据

img = cv2.imread("imori.jpg").astype(np.float32)
H, W, C = img.shape

3.灰度化

gray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0]

4.Gaussian Filter

K_size = 5
sigma = 1.4
                

5.补0

pad = K_size // 2
gau 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值