Halcon区域生长的几种算法regiongrowing/regiongrowing_mean/watersheds

Halcon区域生长的几种算法

文章目录

  • Halcon区域生长的几种算法
    • 1. regiongrowing 算子
    • 2. regiongrowing_mean算子
    • 3. 分水岭算法

如果想要获得具有相似灰度的相连区域,可以使用区域生长法寻找相邻的符合条件的像素。区域生长法的基本思想是,在图像上选定一个“种子”像素或“种子”区域,然后从“种子”的邻域像素开始拽索,将灰度或者颜色相近的像素附加在“种子”上,最终将代表同一物体的像素全部归属于同一“种子”区域,达到将目标物体分割出来的目的。区域生长法的算法执行速度非常快,适用于对检测速度要求高的情况。

1. regiongrowing 算子

Halcon 中的regiongrowing算子实现了区域生长的功能,它能将灰度相近的相邻像素合并为同一区域。regiongrowing 算子的原型如下:

regiongrowing(Image : Regions : Row, Column, Tolerance, Minsize :)

其中各参数的含义如下。
(1)参数1:Image为输入的单通道图像。
(2)参数2:Regions 为输出的一组区域。
(3)参数3和4:Row、Column分别为矩形区域的宽和高,需要是奇数,以便计算中心点坐标。默认为1,1,也可以选择其他奇数。
(4)参数5:Tolerance 为灰度差值的分割标准。如果另一个点的灰度与种子区域的灰度差值小于Tolerance,则认为它们可以合并为同一区域。这个值默认为6.0。
(5)参数6:MinSize,表示输出区域的最小像素数,默认为100。
其工作步骤如下。
(1)设定一个尺寸为RowColumn的卷积核,以及一个作为分界依据的像素灰度差值Tolerance。
(2)使用上述指定尺寸的卷积核在原图上进行扫描,并计算卷积核内矩形图像的中心点灰度与邻域矩形图像的中心点灰度差。如果差值小于Tolerance,则将这两个矩形区域合并为同一个。
卷积核默认为1
1,一般长宽都为奇数。如果大于11,需要先对图像进行平滑处理,平滑的卷积核大小至少为RowColum,这是为了使矩形中心更突出。如果图像上的噪点比较多并且卷积核比较小,也可以省略平滑这一步骤,以减少误判。
(3)对合并后的区域进行判断,如果该区域包含的像素数大于设定的MineSize,则输出结果区域。举例如下:

*导入图像
read_image (Image,'data/village')
*对原图进行均值处理,选用5*5的滤波器
mean _image (Image, Mean, 5,5)
*使用regiongrowing算子寻找颜色相似的邻域
regiongrowing(Mean,Regions,1,1,3.0,100)
*对提取区域进行形态学处理,使区域更加平滑和完整
closing_circle (Regions, RegionClosing, 3.5)

使用regiongrowing算子进行区域分割的效果如图所示。
在这里插入图片描述
图(a)为输入的原始图像,图(b)为使用regiongrowing算子进行区域生长后分割出的区域。由图中可以看出,颜色相近的邻域被合并成了同一区域,并以同一种颜色显示。分割的效果与滤波器的方法、尺寸有关,也与regiongrowing算子的参数有关,可根据实际需要进行调节。

2. regiongrowing_mean算子

regiongrowing_mean算子的作用与regiongrowing算子类似,也是使用区域生长法进行分割不同的是,regiongrowingmean 算子的输入需要是灰度均值图像。regiongrowing_mean算子的原型如下:

regiongrowing_mean (Image : Regions : startRow, startColumn,Tolerance,MinSize:)

其中各参数的含义如下。
(1)参数1:Image为输入的单通道图像。
(2)参数2:Regions 为输出的一组区域。
(3) 参数3和4:startRow、startColumn分别为起始生长点的坐标。
(4)参数5:Tolerance 为灰度差值的分割标准。如果另一个点的灰度与种子区域的灰度差值小于Tolerance,则认为它们可以合并为同一区域。这个值默认为5.0。
(5)参数6:MinSize 为输出区域的最小像素数,默认为100。
该算子指明了开始进行区域生长算法的点(x,y)的坐标,并以指定的点为中心,不断搜索其邻域,寻找符合设定条件的区域。这里的条件有两种,一是区域边缘的灰度值与当前均值图中对应的灰度值的差小于Tolerance参数的值;二是区域包含的像素数应大于MinSize参数的值。举例如下:

*读取图像
read_image (Image, ' data/village')
*对原图进行均值处理,选用circle类型的中值滤波器
median_image (Image, ImageMedian, 'circle', 2, 'mirrored')
*使用regiongrowing算子寻找颜色相似的邻域
regiongrowing (ImageMedian, Regions, 1, 1, 3, 500)
*对图像进行粗略的区域分割,提取满足条件的各个独立区域
shape_trans (Regions, Centers, 'inner _center')
connection (Centers, Singlecenters)
*计算出初步提取的区域的中心点坐标
area_center (Singlecenters, Area, Row, Column)
*以均值灰度图像为输入,进行区域生长计算,计算的起始坐标为上一步的各区域中心
regiongrowing_mean (ImageMedian, RegionsMean, Row, Column, 25, 100)

这样满足参数条件的相似邻域就合并成了一个区域,提取的效果如图所示。
图(a)为输入的原始图像,图(b)为使用regiongrowing_mean算子进行区域生长后分割出的区域。可以看出,与上图相比,本图分割出的区域单个面积更大,更多的小面积区域被大的邻近区域合并,边界也更加清晰。可以根据实际需要调节所用的参数,以便更理想地分割出目标物体。
在这里插入图片描述

3. 分水岭算法

分水岭算法是一种典型的基于边缘的图像分割算法,通过寻找区域之间的分界线,对图像进行分割。“分水岭”这个名字与一种地貌特点有关,它的思想是,把图像的灰度看作一张地形图,其中像素的灰度表示该地点的高度。灰度值低的区域是低地,灰度值越高,地势越高。
低地聚集的地方如同一块盆地,如果模拟向整片区域注水,那么每块盆地将成为一个单独的积水区,即图像上的分割区域,盆地与盆地之间的边界就是区域的边界。随着注水的量越来越多,盆地的积水面积会不断扩大,边界区域则会越来越小,最后形成的分割边界就是分水岭。
分水岭算法能较好地适用于复杂背景下的目标分割,特别是具有蜂窝状结构的画面的内容分
割。Halcon 中使用watersheds算子提取图像的分水岭。如果图像上包含过多的精细区域或者噪点,输出的区域数量将非常庞大,并影响算法的速度。该算子的原型如下:

watersheds (Image : Basins, Watersheds ::)

其中各参数的含义如下。
(1)参数1:Image 为输入的图像,一般为单通道图像。这里要注意,因为盆地一般指的是灰度值低的区域,所以如果前景目标比较亮而背景比较暗,可以在导入图像后使用invert_image 算子将图像颜色进行反转。
(2)参数2:Basins为输出的盆地区域。
(3)参数3:Watersheds 为输出的分水岭区域。一般一幅输入图像对应一个分水岭区域,而输出的Basins 区域则是多个区域的集合。
除了watersheds算子外,也可以使用watersheds_threshold算子进行分水岭分割。二者的区别在于,后者比前者多了一步操作,即在得到初步的分水岭分割结果之后,将灰度小于阈值的分水岭合并。具体来说,假设分水岭的最小灰度为Wmin,分水岭两侧的“洼地”区域的最小灰度分别为B1,B2,如果max{(Wmin-B,),(Wmin-B2,)}的值小于阈值,则将这两个“洼地”区域合并,分水岭消失。通过这样的阈值处理,符合灰度阈值条件的灰度“洼地”区域即被提取出来。该算子的原型如下:

watersheds_threshold(Image : Basins:Threshold:)

其中各参数的含义如下。
(1)参数1:Image为输入的图像,
一般为单通道图像。如果前景目标比较亮而背景比较暗
可以在导入图像后使用invert_image算子将图像颜色进行反转。
(2)参数2:Basins 为输出的盆地区域。
(3)参数3:Threshold为设置的灰度阈值。建议该值不要超过原图的最大灰度,否则将无法提
取出分水岭,图像整体将作为一个区域被提取出来。
这里以一个实际场景图片为例,介绍图像分水岭算法的算子与应用。案例的图像如图所示,其中:图(a)为输入的原始图像,图(b)为使用Watershcds算子进行分割的结果,图©为提取出的缺陷区域,并以不同的颜色对分割出的区域进行了区分。
在这里插入图片描述
使用分水岭算法进行分割的代码如下:

*输入待检测的木材图像
read_image (Image, 'data/woodboard')
*将原始图转化为灰度图,便于后续的平滑处理
rgbi_to_gray (Image, GrayImage)
*对单通道图像进行高斯平滑处理,以去除噪声
gauss filter (GrayImage, ImageGauss, 11)
*对高斯平滑后的图像进行分水岭处理与阙值分割,提取出盆地区域
watersheds (ImageGauss, Basinsl, Watersheds)
watersheds threshold(ImageGauss, Basins, 50)

经过上述步骤,即可得到图像中的灰度“洼地”区域,结合图像的内容,这部分区域即为木材
缺陷的局部区域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/278943.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22 UVM Callbacks

回调用于改变组件或对象的行为而不修改其代码。请参阅SystemVerilog callback - VLSI Verify以更好地理解。UVM 中的phasing机制就是回调的一个简单示例。 1 UVM Callback Usage 允许即插即用机制以建立可重用的验证环境。基于钩子方法(hook method)调…

2023-12-29 服务器开发-centos-安装php8

摘要: 2023-12-29 服务器开发-centos-安装php8 centos-安装php8 必备条件 Minimal CentOS 8 / RHEL 8User with sudo rightsInternet Connection (1) 更新系统 更新系统 $ sudo dnf update $ sudo dnf upgrade 重启系统 $ sudo reboot (2) 启用 EPEL & Remi 软件库…

golang 图片加水印,字体文件从哪里找

鼠标左键双击此电脑图标在此电脑文本框输入电脑默认字体地址:C:\Windows\Fonts找到需要用到的字体文件,复制到指定文件夹

Python/R/GUI/BI类型常用数据可视化工具

什么是数据可视化工具? 数据可视化工具是指旨在可视化数据的所有形式的软件。它们处理数据输入,将其转换为用户可以根据自己的需求进行定制的视觉效果。 不同的工具可以包含不同的功能,但最基本的是,数据可视化工具提供输入数据集…

新品出击 | 软网关BLIoTLink免费发布

新品出击|软网关BLIoTLink免费发布 BLIoTLink是一款免费的物联网协议转换软件,可以部署在任何基于Linux OS的系统(Linux、Debian、Ubuntu、FreeRTOS、RT-Thread)中,使用灵活,可以实现数据的采集以及接入网络平台。 BL…

[Angular] 笔记 18:Angular Router

Angular Router 视频 chatgpt: Angular 具有内置的大量工具、功能和库,功能强大且经过良好设计,如组件化架构、依赖注入、模块化系统、路由和HTTP客户端等。这些功能可以直接用于项目中,无需额外的设置或第三方库。这简化了开发流…

mysql 26day 数据库双主双从 搭建mycat 数据库负载均衡 读写分离

目录 搭建一个(双主双从) (然后搭建mycat)四台主机配置master1 (主库1)master2 (主库2)slave 1(从库1)master1 (主库1)slave 1(从库1)如果配置出错 需要从这里从新配置 写入数据(测试)mycat安装java安装mycat编辑文件server.xml编辑文件schema.xml配置 m…

AI面板识别 - 华为OD统一考试

OD统一考试 (B卷) 分值: 100分 题解: Java / Python / C++ 题目描述 AI识别到面板上有N(1 ≤ N ≤ 100)个指示灯,灯大小一样,任意两个之间无重叠。 由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2…

智慧城市新型基础设施建设综合方案:文件全文52页,附下载

关键词:智慧城市建设方案,智慧城市发展的前景和趋势,智慧城市项目方案,智慧城市管理平台,数字化城市,城市数字化转型 一、智慧城市新基建建设背景 1、城市化进程加速:随着城市化进程的加速&am…

SAP问题 OPEN SQL 取不到值

关键:数据库中有数据,但是open sql取不到数据 背景: 标准程序在测试环境正常执行,在生产环境报错。 解决过程: 第一步:分析执行结果不一致可能的原因: 1.测试数据问题,可能性小&…

前端三件套html/css/js的基本认识以及示例程序

简介 本文简要讲解了html,css,js.主要是让大家简要了解网络知识 因为实际开发中很少直接写html&css,所以不必过多纠结,了解一下架构就好 希望深度学习可以参考MDN和w3school HTML 基础 HTML (Hyper Text Markup Language) 不是一门编程语言,而是一种用来告知浏览器如…

AAAI 2024:大模型如何掌握复杂工具?看孔子框架的教学之道

如今,大型语言模型(LLM)发展飞速,在文本和图像生成方面表现都很出色,但在我们的实际生活中,要理解和正确使用各种工具方面尚存在困难。人们期望这些模型在解决实际问题时能够灵活运用和理解各种工具&#x…

Linux(ubuntu)下git / github/gitee使用

先附上git命令 linuxchenxiao:~$ cd Templates/ 先进入一个目录,也可mkdir新建一个目录:用于接下来初始化为git可以管理的仓库 这个目录就是所说的工作目录,指当前正在进行开发的项目的本地目录。 linuxchenxiao:~/Templates$ git init 已…

大数据技术发展史

今天我们常说的大数据技术,其实起源于Google在2004年前后发表的三篇论文,也就是我们经常听到的“三驾马车”,分别是分布式文件系统GFS、大数据分布式计算框架MapReduce和NoSQL数据库系统BigTable。 你知道,搜索引擎主要就做两件事…

js for和forEach 跳出循环 替代方案

1 for循环跳出 for(let i0;i<10;i){if(i5){break;}console.log(i) }在函数中也可以return跳出循环 function fn(){for(let i0;i<10;i){if(i5){return;}console.log(i)} } fn()for ... of效果同上 2 forEach循环跳出 break会报错 [1,2,3,4,5,6,7,8,9,10].forEach(i>…

基于虚拟机ubuntu的linux和shell脚本的学习,以及SSH远程登陆实战

简介 特点 是一款操作系统,跟windows,macos一样,有下面的特点 简单和高效,一切皆文件,所有配置都通过修改文件解决,不需要繁琐的权限和设置 权限高,把所有细节都交给用户,可完全自定义 安全,所有程序只有自己执行才会启动 分类 1、debian系主要有Debian&#xff0c;Ubun…

出海合规云安全,AWS Landing Zone解决方案建立安全着陆区

在出海的大环境中&#xff0c;企业数字化转型的趋势之一就是上云。然而&#xff0c;上云也带来了新的挑战&#xff0c;特别是对企业的 IT 建设和管理提出了更高的要求。为了构建一个安全合规的云上信息系统环境&#xff0c;满足企业中不同用户的快速增长、资源访问可控、成本可…

Selenium在vue框架下求生存

vue框架下面&#xff0c;没有id、没有name&#xff0c;vue帮开发做了很多脏活累活&#xff0c;却委屈了写页面自动化测试的人&#xff08;当然&#xff0c;也给爬信息的也带来了一定的难处&#xff09;。这里只能靠总结&#xff0c;用一些歪门邪道&#xff1a; 一、跟开发商量…

三台CentOS7.6虚拟机搭建Hadoop完全分布式集群(二)

这个是笔者大学时期的大数据课程使用三台CentOS7.6虚拟机搭建完全分布式集群的案例&#xff0c;已成功搭建完全分布式集群&#xff0c;并测试跑实例。 6.安装JDK 以下操作现在master上操作&#xff0c;然后远程复制到slave01、slave02即可。 6.1 将压缩包发送到master节点机…

【连接池】-从源码到适配(下),使用dynamic-datasource导致连接池没生效(升级版本)

写在前面 书接上文&#xff0c;连接池没生效&#xff0c;启用了一个什么默认的连接池。具体是什么&#xff0c;一起来看看源码吧。 目录 写在前面一、问题描述二、本地调试三、升级dynamic-datasource四、新的问题&#xff08;一&#xff09;数据源初始化问题&#xff08;二&am…