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

十四、计算机视觉-形态学梯度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、梯度的概念
  • 二、梯度的应用
  • 三、梯度如何实现


一、梯度的概念

形态学梯度(Morphological Gradient)是数字图像处理中的一种基本操作,用于检测图像中的边缘和轮廓。它结合了形态学膨胀(Dilation)和形态学腐蚀(Erosion)两种基本操作的结果,从而得到一个图像的边缘信息。


二、梯度的应用

现在有个问题请大家想一下,上面我们提到了梯度可以得到图像的边缘信息,那我们通过前几节的课程想一下 梯度是如何实现的?
例如我现在有个圆,我如何得到圆的边缘?
我如果把这个圆给膨胀一下,这个圆就变大了一圈,我再给腐蚀一下,圆又变小了,如果拿膨胀减去腐蚀的 不就是边缘了吗。
那有人可能又问了:膨胀过后减去原图不也能得到边缘吗,为什么还要在腐蚀一下在减呢?

其实膨胀减去原图也能得到边缘,但是这和膨胀减去腐蚀是有差距的:
当我们将膨胀操作的结果减去原始图像时,实际上得到的是原始图像中比周围更亮的区域。这是因为膨胀操作会扩大图像中较亮的区域,而减去原始图像后,差异部分就是原始图像中相对较亮的区域。因此,这样的操作会突出原始图像中的亮部分,而不是物体的边缘。
对于检测边缘,我们需要考虑的是图像中亮暗交界处的变化,而不仅仅是图像中较亮的区域。形态学梯度通过膨胀和腐蚀操作的差异来捕获这种变化,因为它考虑了物体与背景之间的差异,即使在较暗的物体周围也能有效地检测到边缘。
因此,直接将膨胀操作的结果减去原始图像并不适合用于突出图像的边缘信息,而形态学梯度通过膨胀减去腐蚀来更准确地实现这一目的。

三、梯度如何实现

import cv2
import numpy as np# 读取图像
image = cv2.imread('yunfeng.jpg', cv2.IMREAD_GRAYSCALE)# 定义结构元素
kernel = np.ones((5,5), np.uint8)# 膨胀操作
dilated = cv2.dilate(image, kernel, iterations=1)# 腐蚀操作
eroded = cv2.erode(image, kernel, iterations=1)# 形态学梯度
gradient = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)# 显示原始图像、膨胀结果、腐蚀结果和形态学梯度结果
cv2.imshow('Original 、', image)
cv2.imshow('Dilated ', dilated)
cv2.imshow('Eroded ', eroded)
cv2.imshow('Morphological', gradient)cv2.waitKey(0)
cv2.destroyAllWindows()

上面代码对图像腐蚀和膨胀是为了看对比效果,实际上梯度是通过morphologyEx MORPH_GRADIENT这个参数实现的。
我们看下最终效果:

在这里插入图片描述

http://www.lryc.cn/news/310146.html

相关文章:

  • 3月03日,每日信息差
  • leetcode 简单
  • 服务器硬件基础知识全解析
  • python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析
  • vmware网络负载均衡方式
  • Docker基础教程 - 2 Docker安装
  • Android 多桌面图标启动, 爬坑点击打开不同页面
  • 2024-3-1-网络编程作业
  • pytorch基础2-数据集与归一化
  • Python测试框架pytest介绍用法
  • AI对话系统app开源
  • SpringBoot+aop实现主从数据库的读写分离
  • 胎神游戏集第二期
  • Unicode/ASCII/UTF的关系(模板字面量、模板字符串、占位符)
  • 三、低代码平台-单据配置(单表增删改查)
  • 6.1 数据驱动型业务管理方法(3%)
  • JVM学习目录
  • 使用远程桌面连接工具上传文件到Windows轻量应用服务器时,如何优化文件传输速度?
  • 【Linux】基本指令(下)
  • LeetCode受限条件下可到达节点的数目
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
  • electron-release-server部署electron自动更新服务器记录
  • 贪心(基础算法)--- 区间选点
  • JAVA计算表达式
  • 【复现】宏景HCM 任意文件读取漏洞_63
  • Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)(2)
  • Web应用安全威胁与防护措施
  • MySQL相关知识汇总
  • 【旧文搬运】为你的 Laravel 应用添加一个基于 Swoole 的 WebSocket 服务
  • vue项目从后端下载文件显示进度条或者loading