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

机器视觉初步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)

注释:


  1. 图像的梯度(Gradient)是一个矢量,用于描述图像中像素点值的变化速度。在图像处理中,梯度通常用于计算图像中的边缘,这是一种提取图像特征的方法。
    简单来说,梯度表示图像中像素值的变化,从一个特定的方向或方向组来看,像素值增加或减少的程度。例如,如果我们沿着图像中的水平方向(从左到右)移动,那么在这个方向上的像素值将会增加,因此在水平方向上的梯度值就会增加。相反,如果我们沿着垂直方向(从上到下)移动,那么在这个方向上的像素值将会减少,因此在垂直方向上的梯度值就会减少。
    在计算机视觉和图像处理中,梯度用于寻找图像中的边缘和纹理等特征。通过计算图像中每个像素点的梯度值,我们可以找到图像中的边缘或其他有用的信息,这些信息可以用于目标检测、图像分割和其他计算机视觉任务。 ↩︎

  2. 差分运算的基本原理:
    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. 在某些情况下,可以通过差分数组快速地计算原数组的值。
    总之,差分运算是一种在数学和计算机科学中处理数组的方法,通过对原数组的局部元素进行操作,得到相应的差分数组。
    差分运算可以应用于时间序列分析、保持数据结构稳定性、实现快速排序等任务。 ↩︎

  3. 图像边缘是指图像中灰度值突然变化的地方。导数是函数在某一点的切线斜率,它在图像处理中常用来描述图像边缘。
    计算图像边缘导数的方法如下:
    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 企业工程项目管理系统源码-全面的工程项目管理

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

2023最新软件测试面试题【1000道题含答案】

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

【目标跟踪】MOT数据集GroundTruth可视化

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

软件测试的概念与过程----学习软件测试前的思考

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

Streamlit基础教程

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

内网穿透技术

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 转载自内…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

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* …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...