机器视觉初步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 使用固定公网地址远程联机 转载自内…...

计算机网络笔记:内部网关协议RIP
文章目录 1.协议RIP的工作原理2.距离向量算法3.坏消息传播得慢 1.协议RIP的工作原理 RIP的地位:RIP是内部网关协议IGP中最先得到广泛使用的协议,其中文译名为路由信息协议。 RIP概述: RIP是一种分布式的基于距离向量的路由选择协议&#x…...

基于Java学生信息管理系统设计实现(源码+lw+部署文档+讲解等)
博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…...

PHP简单入门
PHP是一种流行的服务器端编程语言,被广泛用于Web开发。许多著名的网站和应用程序都是使用PHP编写的,例如Facebook、Wikipedia和WordPress等。本篇文章将为您介绍如何入门PHP编程。 环境配置 在开始使用PHP之前,需要先配置开发环境。要在本…...

java 客户端操作HDFS
1、windows上部署hadoop包 部署包win版本 源码包zip包 lib整合:共121个jar包 $HADOOP_PREFIX/share/hadoop/{common,hdfs,mapreduce,yarn,tools}/{lib,.}*.jar 将windows版本hadoop/bin/hadoop.dll 放到c:/windows/system32下 2、windows环境变量配置 hadoop的…...

区块链中的共识机制以及共识算法
目录 什么是共识 什么是共识机制 共识机制类型 1、基于工作证明(Proof of Work PoW)...

【计算机网络自顶向下】DNS简答题总结
主要功能:将域名解析为主机能识别的IP地址 DNS实现的功能 主机到IP地址的转换主机别名的转换邮件服务器别名负载均衡 DNS实现冗余服务器:一个IP地址集合对应同一个规范主机名 域名系统 分布式数据库:一个由多层DNS服务器实现的分布式数据库应…...

【QQ界面展示-实现自动回复 Objective-C语言】
一、刚才咱们监听键盘弹出事件,是怎么监听的, 1.监听键盘弹出事件的步骤 1)首先,在控制器的viewDidLoad方法中,创建一个NotificationCenter对象啊 2)通过center,让当前控制器的这个方法,监听这个通知, 3)然后,我们在这个通知里面,获取到键盘的Y值, 4)对我们的…...

-bash: ssh: command not found
解决方法: 命令安装SSH: yum -y install openssh-clients [roothad2 ~]# yum -y install openssh-clients Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.qlu.edu.cn * extras: mirrors.ustc.edu.cn …...

ansible的部署和模块
一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 …...

nginx的优化
目录 一 隐藏版本号在网页上面有nginx的版本号会让别人攻击你的服务器 二 nginx的优化之日志分割 三 nginx的优化之页面压缩 四 连接超时 五 nginx的并发设置 七总结:nginx的优化 一 隐藏版本号在网页上面有nginx的版本号会让别人攻击你的服务器 如图所示 第一种方法是关…...