canny边缘检测算法的python实现


前言

Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检测算法。更为重要的是Canny创立了“边缘检测计算理论”(computational theory of edge detection)解释这项技术如何工作。(摘自百度百科)


一、canny边缘检测算法是什么?

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。而canny边缘检测算法就是为了解决这个问题提出来的一种解决模式。(摘自百度百科)

二、使用步骤

1.引入库

代码如下:

import cv2
import numpy as np

2.读入数据并处理数据

代码如下:

# 读取图像
grey = cv2.imread('lena.png')#读图
#进行图像数据处理
grey1 = cv2.cvtColor(grey, cv2.IMREAD_GRAYSCALE)
img =np.array( [[0]*512]*512 )
for k in range(0,512):
    for i in range(0,512):
        img[k][i]=grey1[k][i][0]
img = np.uint8(img)

3.高斯滤波

代码如下:

# 高斯滤波
kernel_size = 5   #高斯卷积核函数,老师推荐为3,但3的效果不如5
sigma = 1.4
img_blur = cv2.GaussianBlur(img, (kernel_size, kernel_size), sigma)

4.计算梯度和方向

代码如下:

# 计算梯度和方向
sobel_x = cv2.Sobel(img_blur, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img_blur, cv2.CV_64F, 0, 1, ksize=3)
grad_mag = np.sqrt(sobel_x ** 2 + sobel_y ** 2)
grad_dir = np.arctan2(sobel_y, sobel_x)

5.非极大值抑制

代码如下:

# 非极大值抑制
grad_mag_max = np.zeros(grad_mag.shape)
for i in range(1, grad_mag.shape[0] - 1):
    for j in range(1, grad_mag.shape[1] - 1):
        #如果角度小于0,使其加上一个pi,量化至四个方向
        if grad_dir[i, j] < 0:
            grad_dir[i, j] += np
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值