当前位置: 首页 > java >正文

图像预处理-图像边缘检测(流程)

一.高斯滤波

        因为图像边缘检测就是把像素值有差异的地方提取出来,所以噪声会有很大影响,因此需要对图像进行平滑处理高斯滤波是流程中常用的方法。

二.计算图像的梯度与方向

过程中通常使用sobel算子进行梯度计算,在OpenCV中,默认使用 G=|G(x)+G(y)| 来计算梯度值。

这个角度值其实是当前边缘的梯度方向,若梯度方向不是0°、45°、90°、135°这种特定角度,那么就要用到插值算法来计算当前像素点在其方向上进行插值的结果,然后进行比较并判断是否保留该像素点。

- 为-22.5°~22.5°,或-157.5°~157.5°,则认为边缘为水平边缘;

- 为22.5°~67.5°,或-112.5°~-157.5°,则认为边缘为45°边缘;

- 为67.5°~112.5°,或-67.5°~-112.5°,则认为边缘为垂直边缘;

- 为112.5°~157.5°,或-22.5°~-67.5°,则认为边缘为135°边缘;

三.非极大值抑制

        经过第二步得到的边缘不经过处理是没办法使用的,因为高斯滤波去噪边缘会模糊,得到的边缘像素点非常多,因此需要对其进行一些过滤操作,而非极大值抑制就是一个很好的方法。即检查每个像素点的梯度方向上的相邻像素,并保留梯度值最大的像素,将其他像素抑制为零

四.双阈值筛选

经过非极大值抑制之后,我们还需要设置阈值来进行筛选。

        当某一像素位置的幅值超过最高阈值时,该像素必是边缘像素;当幅值低于最低阈值时,该像素必不是边缘像素;幅值处于最高像素与最低像素之间时,如果它能连接到一个高于阈值的边缘时,则被认为边缘像素,否则就不会被认为是边缘。

五.实现边缘检测的流程函数

edges = cv2.Canny(image, threshold1, threshold2)

- threshold1阈值,用于决定可能的边缘点。

- threshold2阈值,用于决定强边缘点。

- 即使读到的是彩色图也可以进行处理。

import cv2 as cvimg = cv.imread('../images/lvbo2.png')gray1 = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 手动进行高斯滤波再调用canny边缘检测
img2 = cv.GaussianBlur(img, (3, 3), 1)gray2 = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)# 二值化处理方便观察
ret, binary = cv.threshold(gray1, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
ret, binary1 = cv.threshold(gray2, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)# 利用内置高斯滤波器进行边缘检测
edge = cv.Canny(binary, 30, 70)
edge1 = cv.Canny(binary1, 30, 70)cv.imshow('edge', edge)
cv.imshow('edge1', edge1)
cv.waitKey(0)
cv.destroyAllWindows()

        可以发现,提前手动进行去噪处理效果更好,虽然canny函数内置了高斯滤波,但根据要求进行去噪预处理可以得到更好的效果。

http://www.xdnf.cn/news/513.html

相关文章:

  • OSI七层网络模型详解
  • Datawhale AI春训营】AI + 新能源(发电功率预测)Task1
  • 【KWDB创作者计划】_从0到1部署KWDB:踩坑指南与最佳实践
  • 深入理解 MCP 协议:开启 AI 交互新时代
  • Django 实现服务器主动给客户端发送消息的几种常见方式及其区别
  • 机器学习误差图绘
  • [HOT 100] 1964. 找出到每个位置为止最长的有效障碍赛跑路线
  • PHP中stdClass详解
  • 【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • 接口自动化 ——fixture allure
  • PHP异常处理__Throwable
  • STM32单片机入门学习——第42节: [12-2] BKP备份寄存器RTC实时时钟
  • Unity:获取组件对象(GetComponent<T>())
  • 栈(c++)
  • 单例模式:懒汉式的两种优化写法
  • Unity webgl 获取图片或视频数据
  • 【unity】Vulkan模式下部分Android机型使用VideoPlayer组件播放视频异常问题
  • 交易系统的构建与实战法则
  • JCST 2025年 区块链论文 录用汇总
  • 电子电器架构 --- DFMEA设计失效模式和后果分析
  • 聊一聊接口自动化测试脚本如何进行维护的?
  • 齿轮检测中的“正负之谜”:为何有的项目有,有的没有?
  • C# 预定义类型全解析
  • Selenium 入门之环境搭建
  • `Accelerate`库实现模型并行计算
  • SAP系统工艺路线的分配物料出现旧版包材
  • 第6章 类文件结构《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
  • [特殊字符] AI 大模型的 Prompt Engineering 原理:从基础到源码实践
  • Linux | 软件仓库管理
  • 回溯算法(3):番外篇