机器视觉初步6-1:基于梯度的图像分割
把基于梯度的图像分割单独拿出来。
文章目录
- 一、图像梯度相关算子的原理
- 1. Sobel算子
- 2. Prewitt算子
- 3. Roberts算子
- 二、python和halcon算子实现
- 1.python实现
- 2.halcon实现
基于梯度的图像分割方法利用像素之间的梯度信息来进行图像分割。
梯度 1是图像中像素灰度值变化最快的方向,基于梯度的图像分割方法就是通过分析图像中像素的梯度信息来提取图像中的不同物体,实现图像分割的目的。

基于梯度的图像分割方法的基本思想是:
首先对输入的图像进行滤波、增强等预处理操作,以增强图像中物体的边缘信息;
然后计算每个像素的梯度值,通常包括水平梯度、垂直梯度和斜梯度三个分量;
最后根据梯度信息进行图像分割。具体来说,基于梯度的图像分割方法通常包括以下几个步骤:
1. 图像预处理:对输入的图像进行滤波、增强等预处理操作,以增强图像中物体的边缘信息。
2. 计算梯度:对每个像素计算其水平、垂直和斜梯度三个分量。
3. 阈值化:通过计算每个像素的梯度值,将梯度值小于某一阈值的像素设置为背景像素,将梯度值大于阈值的像素设置为前景像素。
4. 分割结果:根据阈值化后的结果,将每个像素分配到相应的物体类别中,实现图像分割。
基于梯度的图像分割方法的优点是速度快、计算量小,适用于处理大规模的图像数据。但是,该方法的缺点是对噪声敏感,需要进行适当的滤波和去噪处理。同时,该方法仅适用于物体边缘明显的图像,对于物体形状复杂的图像分割效果并不理想。
一、图像梯度相关算子的原理
1. Sobel算子
Sobel算子是一种用于检测图像中灰度级别变化的算子,尤其是在较小灰度变化时效果比较明显。它通过计算图像中每一点与周围八个点灰度值的差,并进行差分运算,从而得到图像梯度值。
2. Prewitt算子
Prewitt算子和Sobel算子的原理相似,它们都是通过计算图像中每一点与周围八个点灰度值的差,并进行差分运算2,从而得到图像梯度值。不同的是,Prewitt算子不仅计算了差分,而且进行了平方操作,从而使得梯度值在x和y方向上的结果是一致的。
3. Roberts算子
Roberts算子是一种二阶微分算子,它通过计算图像中每一点与周围九个点灰度值的差,并进行差分运算,从而得到图像梯度值。Roberts算子主要用于边缘检测,尤其是在图像的边缘处有较强的导数3。
二、python和halcon算子实现
1.python实现
import cv2
import numpy as npdef sobel_gradient(img):# Sobel 算子gray_img = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=3)edge_img = cv2.convertScaleAbs(gray_img)return edge_imgdef prewitt_gradient(img):# Prewitt 算子gray_img = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=3)edge_img = cv2.convertScaleAbs(gray_img)return edge_imgdef roberts_gradient(img):# Roberts 算子gray_img = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=3)edge_img = cv2.convertScaleAbs(gray_img)return edge_imgimg = np.zeros((500, 500, 3), np.uint8)
img[50:150, 50:150] = 255
cv2.imshow('image', img)sobel_gradient_img = sobel_gradient(img)
cv2.imshow('sobel_gradient_img', sobel_gradient_img)prewitt_gradient_img = prewitt_gradient(img)
cv2.imshow('prewitt_gradient_img', prewitt_gradient_img)roberts_gradient_img = roberts_gradient(img)
cv2.imshow('roberts_gradient_img', roberts_gradient_img)cv2.waitKey(0)
cv2.destroyAllWindows()
2.halcon实现
* Sobel 算子
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (Image)* Sobel 算子
[SobelX, SobelY] = sobel_x (Image, 'sobel', 1, 8)
dev_display (SobelX)* Prewitt 算子
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (Image)* Prewitt 算子
[PrewittX, PrewittY] = prewitt_x (Image, 'prewitt', 1, 8)
dev_display (PrewittX)* Roberts 算子
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (Image)* Roberts 算子
[RobertsX, RobertsY] = roberts_x (Image, 'roberts', 1, 8)
dev_display (RobertsX)
注释:
图像的梯度(Gradient)是一个矢量,用于描述图像中像素点值的变化速度。在图像处理中,梯度通常用于计算图像中的边缘,这是一种提取图像特征的方法。
简单来说,梯度表示图像中像素值的变化,从一个特定的方向或方向组来看,像素值增加或减少的程度。例如,如果我们沿着图像中的水平方向(从左到右)移动,那么在这个方向上的像素值将会增加,因此在水平方向上的梯度值就会增加。相反,如果我们沿着垂直方向(从上到下)移动,那么在这个方向上的像素值将会减少,因此在垂直方向上的梯度值就会减少。
在计算机视觉和图像处理中,梯度用于寻找图像中的边缘和纹理等特征。通过计算图像中每个像素点的梯度值,我们可以找到图像中的边缘或其他有用的信息,这些信息可以用于目标检测、图像分割和其他计算机视觉任务。 ↩︎差分运算的基本原理:
1 差分定义:对于给定的两个数组 A 和 B,A 的差分数组 D(A) 是将 A 中的元素分别与它们的前一个元素进行比较,并得出的新的数组。例如,考虑数组 A={3, 1, 5, 8},其差分数组为 D(A) = {2, 0, 3, 2}。
差分运算可以通过以下两个基本步骤实现:
a. 构造差分数组 D(A);
b. 应用差分运算。
2 差分运算的应用:
a. 时间序列分析:通过差分运算,可以分析和比较不同时间段内的数据变化。
b. 数据结构:差分数组可以用于保持数据结构的稳定性,例如堆(heap)数据结构。
c. 排序算法:快速排序(QuickSort)等算法可以利用差分数组实现。
3 性质:
a. 差分数组的伪逆(pseudoinverse)是原始数组的逆矩阵。
b. 在某些情况下,可以通过差分数组快速地计算原数组的值。
总之,差分运算是一种在数学和计算机科学中处理数组的方法,通过对原数组的局部元素进行操作,得到相应的差分数组。
差分运算可以应用于时间序列分析、保持数据结构稳定性、实现快速排序等任务。 ↩︎图像边缘是指图像中灰度值突然变化的地方。导数是函数在某一点的切线斜率,它在图像处理中常用来描述图像边缘。
计算图像边缘导数的方法如下:
1.对于二值图像,边缘区域的像素值是最大值或最小值,可以使用固定阈值或自适应阈值将图像转换为二值图像。
2.对于灰度图像,可以使用高斯滤波器来平滑图像并去除噪声。
3.然后,可以使用梯度算子,如Sobel算子、Scharr算子或Prewitt算子来计算图像的边缘。
4.梯度算子包括一个水平梯度和一个垂直梯度。水平梯度计算公式为:
gradientH = 0.5 * abs(x - x_center)^2 + 0.5 * abs(y - y_center)^2
其中,x 和 y 是图像中的像素坐标,x_center 和 y_center 是图像的中心。
5.垂直梯度计算公式为:
gradientV = 0.5* abs(x - x_center)^2 + 0.5 * abs(y + y_center)^2
6.梯度算子可以用于边缘检测,并且可以通过设置不同的阈值来检测不同宽度和方向的边缘。
7.对于多通道图像,可以使用类似的方法来计算每个通道的边缘,并将它们组合在一起以形成边缘图像。
8.最后,可以将边缘图像转换为彩色图像,并通过卷积或阈值操作来提取图像中的边缘。 ↩︎
相关文章:

机器视觉初步6-1:基于梯度的图像分割
把基于梯度的图像分割单独拿出来。 文章目录 一、图像梯度相关算子的原理1. Sobel算子2. Prewitt算子3. Roberts算子 二、python和halcon算子实现1.python实现2.halcon实现 基于梯度的图像分割方法利用像素之间的梯度信息来进行图像分割。 梯度 1是图像中像素灰度值变化最快的…...

从0开始,精通Go语言Rest微服务架构和开发
说在前面 现在拿到offer超级难,甚至连面试电话,一个都搞不到。 尼恩的技术社区中(50),很多小伙伴凭借 “左手云原生右手大数据”的绝活,拿到了offer,并且是非常优质的offer,据说年…...

Sui x KuCoin Labs夏季黑客松|本周Workshop预告
自Sui x KuCoin Labs夏季黑客松推出以来已有四周的时间,期间收获了众多开发者的积极报名和热情参与。随着黑客松报名即将进入尾声,同期举办的Workshop也迎来了本周的最后一波。本周的黑客松Workshop邀请到MoveEX和Mirror World的负责人作为嘉宾为大家带…...

从电源 LED 读取智能手机的秘密?
研究人员设计了一种新的攻击方法,通过记录读卡器或智能手机打开时的电源 LED,使用 iPhone 摄像头或商业监控系统恢复存储在智能卡和智能手机中的加密密钥。 众所周知,这是一种侧信道攻击。 通过密切监视功耗、声音、电磁辐射或执行操作所需…...

【Linux编辑器-vim使用】
目录 Linux编辑器-vim使用1.vim的基本概念2.vim的基本操作3.vim正常模式命令集4.vim末行模式命令集 Linux编辑器-vim使用 1.vim的基本概念 目前了解的vim有三种模式(其实有好多模式),分别是命令模式、插入模式和底行模式,各模式…...

安装Apache mysql php
目录 一.Apache网站服务 Apache——》静态页面处理——》将静态处理交给PHP Apache简介 安装Apache服务 编辑 安装软件思路 二.安装mysql数据库 1. 安装依赖包 2.创建程序用户管理 3.加压安装包 这边就安装完成了编辑 重点来了 报错了 没有空间 我最后的解决 方法…...

【人工智能】— 神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略
【人工智能】— 神经网络、前向传播、反向传播 前向传播反向传播梯度下降局部最小值多层前馈网络表示能力多层前馈网络局限缓解过拟合的策略 前向传播和反向传播都是神经网络训练中常用的重要算法。 前向传播是指将输入数据从输入层开始经过一系列的权重矩阵和激活函数的计算后…...

小文智能自定义变量详解
在小文交互场景设计时,有一个特殊功能,叫做自定义变量。有时,根据外呼对象的不同,需要对用户传达不同的内容,比如称呼、地址、公司名称等等。此时,就可以使用小文交互的自定义变量功能来实现对不同用户呼出…...
平面电磁波的反射与折射,极化滤波作用
目录 引言 反射定律和折射定律 反射系数和折射系数 平面电磁波在理想介质分界面上的全反射和全折射 全反射 全折射 极化滤波作用 平面电磁波在良导体上的反射与折射 引言 再复杂的电磁波我们都可以看作是很多平面电磁波的叠加 我们在前面介绍的时候,我们认…...
键盘当鼠标用
当鼠标坏掉又需要使用电脑时发现触控板也不能用这就很烦那么键盘当鼠标用教程来了 使用键盘当鼠标的步骤如下: 1. 按住“AltShiftNum Lock”快捷键,弹出鼠标键开启咨询框,点击“是”按钮。 小键盘的数字就是方向/和*就是左右键切换5是单击 …...
动态规划part9 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
文章目录 198.打家劫舍思路思路代码官方题解代码 213.打家劫舍II思路思路代码官方代码困难 337.打家劫舍III思路思路代码官方题解代码困难 今日收获 198.打家劫舍 198.打家劫舍 思路 dp含义,偷前i个房,切第i个房偷 dp[i]max(dp[i-2],dp[i-3])nums[i] …...

【k8s系列】一分钟搭建MicroK8s Dashboard
本文基于上一篇文章的内容进行Dashboard搭建,如果没有看过上一篇的同学请先查阅上一篇文章 k8s系列】使用MicroK8s 5分钟搭建k8s集群含踩坑经验 使用MicroK8s搭建Dashboard很简单,只需要在Master节点按照以下几步操作 1.启用Dashboard插件 microk8s en…...

ArcEngine二次开发0——入门(下载 部署 组件学习)
折腾一下ArcGIS Engine二次开发。 目录 1、开发环境配置2、部署一个ArcGIS Engine应用程序3、ArcObject组件学习4、报错及解决4、其他 1、开发环境配置 参考:https://blog.csdn.net/H48662654/article/details/113384150 (使用ArcEngine前,…...

人工智能---D分离
D分离(D-Separation)是一种用来判断变量是否条件独立的图形化方法。相比于非图形化方法,D-Separation更加直观,且计算简单。对于一个DAG(有向无环图)E,D-Separation方法可以快速的判断出两个节点…...

java spring cloud 企业工程项目管理系统源码-全面的工程项目管理
工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重,…...

2023最新软件测试面试题【1000道题含答案】
1、自动化代码中,用到了哪些设计模式? 单例设计模式 工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果,如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化测…...

【目标跟踪】MOT数据集GroundTruth可视化
MOT数据集格式简介 MOT15数据集下载:https://pan.baidu.com/s/1foGrBXvsanW8BI4eybqfWg?pwd8888 以下为一行gt示例: 1,1,1367,393,73,225,1,-1,-1,-1 各列数据对应含义如下 <frame>,<id>,<bb_left>,<bb_top>,<bb_width&g…...

软件测试的概念与过程----学习软件测试前的思考
软件测试的概念与过程----学习软件测试前的思考 1、软件测试工作是做什么的?2、那我做软件测试拿到一个软件产品我应该从哪里测试,怎末开始工作?3、测试早做好还是晚一些做好?4、软件测试能将软件测试的一点问题都没有嘛ÿ…...

Streamlit基础教程
streamlit是什么 streamlit是一个开源的python库,它能够快速的帮助我们创建定制化的web应用,而且还非常便于和他人分享,特别是在机器学习和数据科学领域。整个过程不需要你了解任何前端的知识,包括html、css、javascript等&#x…...

内网穿透技术
文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 转载自内…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...