Canny 边缘检测

步骤

1.降噪

应用高斯滤波器,以平滑图像,滤除噪声。

边缘检测易受噪声影响,所以使用高斯滤波器平滑图像,降低噪声。

2.梯度

计算图像中每个像素点的梯度大小和方向。

计算大小

Sobel算子是一种常用的边缘检测滤波器,用于计算图像中水平和垂直方向上的梯度变化

就是点乘计算

计算方向

3.非极大值抑制

使用非极大值抑制,消除边缘检测带来的不利影响

4.双阈值检测

应用双阈值检测确定真实和潜在的边缘【双阈值检测

阈值 (minVal 和 maxVal) 是基于梯度大小(即边缘强度)来定义的

  • maxVal(高阈值):
    • 梯度值大于 maxVal 的像素点被直接认为是真正的边缘。
  • minVal(低阈值):
    • 梯度值小于 minVal 的像素点被忽略,认为不是边缘。
  • 梯度值介于 minVal 和 maxVal 之间:
    • 如果这些像素点与高于 maxVal 的边缘像素相连,则保留为边缘。
    • 如果没有相连,则丢弃。

实现

它有现成库可以调用啊

python 复制代码
import cv2
import matplotlib.pyplot as plt
import numpy as np

# 读取图像
image_path = r"D:\python\NAFNet-main\demo\tooth.png"  # 替换为你的图片路径
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 高斯模糊去噪
blurred = cv2.GaussianBlur(image, (5, 5), 0)

# Canny 边缘检测
edges = cv2.Canny(blurred, threshold1=5, threshold2=200)#这边就是最大最小边缘


# 显示原图和边缘检测结果
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap="gray")
plt.axis("off")

plt.subplot(1, 2, 2)
plt.title("Canny Edge Detection")
plt.imshow(edges, cmap="gray")
plt.axis("off")

plt.tight_layout()
plt.show()

最后结果

相关推荐
久违 °1 小时前
【AI-Agent】TagMatrix 数据标注工具开发
人工智能·数据分析·go·agent·数据隐私
小羊在睡觉1 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
AI360labs_atyun2 小时前
腾讯推出电子牛马Marvis,好用吗?
人工智能·科技·ai
Dfreedom.2 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
3DVisionary2 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_2 小时前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程
好评笔记2 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466852 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
weixin_468466852 小时前
工业相机成像原理新手入门指南
人工智能·自动化·机器视觉·工业相机·光学·光学系统·成像原理
回眸&啤酒鸭2 小时前
【回眸】CSDN新增功能测评——AI数字营销之内容创作
人工智能