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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot整合GraphQL

RPC选型入门测试系列文章 GraphQL是一种用于API开发的查询语言和运行时环境。它由Facebook开发并于2015年开源。GraphQL的主要目标是提供一种更高效、灵活和易于使用的方式来获取和操作数据。与传统的RESTful API相比,GraphQL允许客户端精确地指定需要的数据&#…

【51单片机系列】DS1302时钟模块扩展实验之与EEPROM结合使用只进行一次初始化工作

本文是关于时钟芯片DS1302的扩展实验。 文章目录 一、实验分析二、proteus仿真原理图三、软件设计及结果 本实验实现的目的:利用AT24C02掉电不丢失的功能,存储数据用来辨别DS1302时钟是否已经初始化,如果初始化就不执行DS1302初始化函数。 一…

Android移动端超分辨率调研(未完成 目前自用)

作用 图片加载是目前几乎所有的APP都具备的基础能力,在节省服务商的传输带宽之外,也可以降低用户消费端流量的消耗,提升用户的加载速度。帮助每一个产品用更低的成本达到更好的图片加载效果。 效果 另一方面 用TensorFlow实现的图像极度压…

yolov5 主要流程

1.介绍 本文包含了有关yolov5目标检测的基本流程,包括模型训练与模型部署,旨在帮助小伙伴们建立系统的认知💖💖 YOLO是 "You only look once "的首字母缩写,是一个开源软件工具,它具有实时检测…

【23.12.29期--Redis缓存篇】谈一谈Redis的集群模式

谈一谈Redis的集群模式 ✔️ 谈一谈Redis的集群模式✔️主从模式✔️ 特点✔️Redis主从模式Demo ✔️哨兵模式✔️Redis哨兵模式Demo✔️特点 ✔️Cluster模式✔️Redis Cluster模式Demo✔️特点 ✔️ 谈一谈Redis的集群模式 Redis有三种主要的集群模式,用于在分布…

DM、Oracle、GaussDB、Kingbase8(人大金仓数据库)和HIVE给列增加注释

DM数据库给列增加注释 1、创建表 CREATE TABLE test222 ( id int NOT NULL PRIMARY KEY, name varchar(1000) DEFAULT NULL, email varchar(1000) DEFAULT NULL, phone varchar(1000) DEFAULT NULL ) 2、给列添加注释 comment on column TEST222.NAME is 这是一个列注释; 例如…

Android—— MIPI屏调试

一、实现步骤 1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点,关闭其他显示面板接口(&edp_panel、&lvds_panel) --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …

车载毫米波雷达及芯片新趋势研究2--“CMOS+AiP+SoC”与4D毫米波雷达推动产业越过大规模发展临界点

2.1 MMIC芯片工艺发展至CMOS时代,芯片集成度更高、体积与成本下降  MMIC芯片工艺经GaAs、SiGe已发展至CMOS时代,CMOS MMIC具有更低成本、更高集成度的优势。 工艺的主要变化发生在MMIC芯片的射频材料部分,目前SiGe仍为主流工艺。 SiGe虽在…

Linux - 设置虚拟机和主机IP在同一网段(桥接)

1.查看主机ip地址等相关信息。 ipconfig -all 2.设置虚拟网络编辑器 打开虚拟网络编辑器 设置虚拟网络编辑器,设置为桥接模式。(记得以管理员方式打开VMware)。 3.修改虚拟机网卡文件 查看虚拟机ip,我们的目标是将其修改为与主机同一网段…

2024收入最高的编程语言

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 1.Python Python 是最流行、用途最广泛的语言之一。它通常用于网络开发、数据科学、机器学习等。 以下是 Python 编程语言的一些主要用途: Web 开发&…

UE4开发BIM程序 的 流程

某机构BIM设计研究中心主任马晓龙,他对编程颇有研究。今天他会用通俗易懂的语言来讲解基于游戏引擎UE4的BIM技术可视化应用。对于想要自己开发程序的设计师一定要读一下! 1)关于UE4——UE4是什么? 可以简单的理解为,一…

Linux性能优化全景指南

Part1 Linux性能优化 1、性能优化性能指标 高并发和响应快对应着性能优化的两个核心指标:吞吐和延时 应用负载角度:直接影响了产品终端的用户体验系统资源角度:资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈,但…