python canny优化_基于python的自适应阈值的Canny边缘检测

本文介绍了如何使用Python实现自适应阈值的Canny边缘检测,对比了直接使用OpenCV库的Canny方法,强调了自适应阈值的优势。文章通过代码展示了从双边滤波到非极大值抑制、双阈值处理和滞后阈值等步骤,以提高边缘检测的性能。虽然自适应阈值方法提高了边缘检测效果,但计算过程较为耗时,尤其是对于未下采样的图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

canny边缘检测的接口在opencv中给出,直接调用:

ret = cv2.canny(img,t1,t2)

您可以获取边缘检测结果. 其中,t1,t2是需要手动设置的阈值. 许多文献研究了自动阈值设置方法,即该算法可以在运行过程中自适应地找到更好的分割阈值t1

本文基于python3,并复制了一种自适应阈值分割方法.

输入图片为:

输出结果的比较如下: 左图直接使用canny,右图使用本文程序进行自适应分割.

缺点是它是自下而上重写的改进的自适应阈值canny边缘检测,包括非最大抑制之类的过程. . 消耗能量需要很长时间. 上面的输入图像需要27.38s. 我不知道其他学者如何研究自适应阈值Canny边缘检测方法的耗时情况. . 下采样已在程序的预处理过程中完成. 如果没有下采样,则将花费更长的时间.

以下代码:

主程序. py:

import numpy as np

import cv2, time, math

from scipy.signal import convolve2d as conv2

from matplotlib import pyplot as plt

from bilateralfilt import bilatfilt

from dog import deroGauss

import time

#...........................................................................................

def get_edges(I,sd):

dim = I.shape

Idog2d = np.zeros((nang,dim[0],dim[1]))

for i in range(nang):

dog2d = deroGauss(5,sd,angles[i])

Idog2dtemp = abs(conv2(I,dog2d,mode='same',boundary='fill'))

Idog2dtemp[Idog2dtemp<0]=0

Idog2d[i,:,:] = Idog2dtemp

return Idog2d

#...........................................................................................

def nonmaxsup(I,gradang):

dim = I.shape

Inms = np.zeros(dim)

xshift = int(np.round(math.cos(gradang*np.pi/180)))

yshift = int(np.round(math.sin(gradang*np.pi/180)))

Ipad = np.pad(I,(1,),'constant

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值