halcon初识region

本文介绍Halcon中Region的基本概念及应用,包括二值化算子threshold和特征选取算子select_shape的功能与使用方法,并探讨了regiongrowing等区域联合操作。


一、什么是region?

Region 为某些附和要求性质的像素的子集,或者说一些被选择的图块区域s,region大小不受图像限制(一个点都可成为一个region),有fill和margin两种表达方式,类似于游程编码(一种无损压缩编码),可用于压缩,eg:用a2b3c4代表aabbbcccc

二、halcon中的region操作
1、二值化算子threshold   
 原文地址

函数原型:threshold(Image: Region: MinGray,MaxGray: )

功能:

使用全局阈值分割图像,获取像素值介于MinGray和MaxGray的区域。

 参数列表:

第1个参数Image是输入变量,表示输入图像

第2个参数Region是输出变量,表示被分割后的图像

第3个参数MinGray是输入变量,阈值分割像素的最小值,默认值为128.0,建议可用值:0.0, 10.0, 30.0,64.0, 128.0, 200.0, 220.0, 255.0

第4个参数MaxGray是输入变量,阈值分割像素的最大值,默认值为255.0,建议可用值:0.0, 10.0, 30.0,64.0, 128.0, 200.0, 220.0, 255.0

注:最后两个参数的限制条件:MaxGray>=MinGray。

可能的前置应用函数:histo_to_thresh()(根据直方图决定灰度值门限)、min_max_gray()(计算区域内最大最小灰度值)、sobel_amp()(Sobel算子检测边缘)、binomial_filter()(binomial滤波器平滑图像)、gauss_image()(离散高斯函数平滑图像)、reduce_domain()(缩小图像区域)、fill_interlace()(插补两个半个视频图像)

可能的后置应用函数:connection()(连接区域)、dilation1()(扩大区域)、erosion1()(腐蚀区域,变小)、opening()(打开区域)、closing()(关闭区域)、rank_region()(归类区域)、shape_trans()(改变区域形状)、skeleton()(计算区域框架)

可被替换函数:class_2dim_sup()(采用二维空间像素分类分割图像)、hysteresis_threshold()(磁滞门限操作)、dyn_threshold()(局域阀值分割图像)、bin_threshold()(自动产生的阀值分割图像)、char_threshold()(为提取的字符产生一个分割阀值)、auto_threshold()(直方图决定阀值分割图像)、dual_threshold()(对标记的图像做门限操作)

2、特征选取算子select_shape

当我们想要提取Region时,图像处理后,往往存在几个类似的Region,此时,需要根据Region的一些特殊特征,来选择指定的Region。

求Region指定特征值:region_features(Regions : : Features : Value)

根据特征值选择区域:select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )

region的各种特征

例程:select_shape.hdev

read_image(Image,'fabrik')
dev_close_window()
dev_open_window(0,0,512,512,'black',WindowID)
dev_set_color('white')
dev_set_draw('fill')
regiongrowing(Image,Regions,1,1,3,10)
×//区域生长法分割图像以获取区域
 dev_set_color('red')
select_shape(Regions,SelectedRegions,'convexity','and',0.95,1)  
×//特征为‘凸性’
dev_set_color('green')
select_shape(Regions,SelectedRegions,'width','and',100,512)
×//特征为'宽度'
 dev_set_color('blue')
select_shape(Regions,SelectedRegions,'area','and',1,100)
×//特征为‘面积’

其中的算子: regiongrowing(Image: Regions: Row, Column, Tolerance, MinSize:)

函数作用:用区域生长实现图像分割

函数原理:

如果相邻像素的灰度值差小于等于Tolerance,则被融为一个区域。因为矩形一般大于1个像素,所以常常在调用regiongrowing前会用大小至少为Row*Column的低通滤波器平滑一下。如果图像包含小噪声并且矩形很小,平滑后这些因素大都会被去除。而区域包含至少MinSize个点才被挑选出来。区域生长是一个非常快的算子,因此适合用于对时间要求严苛的应用中。

3、区域联合操作









### Halcon 中的 Region 操作 #### Subtract Region Operation 在 Halcon 中,`subtract_region` 是用于从一个区域中减去另一个区域的功能。此操作的结果是一个新的区域,其中只保留了原始区域中不被第二个区域覆盖的部分[^1]。 以下是 `subtract_region` 的基本语法和说明: ```hdevelop subtract_region(Region1, Region2, ResultRegion) ``` - **Region1**: 原始区域。 - **Region2**: 被减去的区域。 - **ResultRegion**: 结果区域,表示从 `Region1` 减去 `Region2` 后剩下的部分。 例如,如果两个圆形区域相交,则可以通过该函数获得未重叠的部分。 --- #### Modify Region Function 除了简单的加法 (`union`) 和减法 (`subtract_region`) 外,Halcon 提供了许多其他修改区域的方法。这些方法可以改变区域形状、大小或边界特性。常见的修改区域功能如下: 1. **dilation_circle / erosion_circle** - 使用圆盘结构元素扩展或收缩区域边缘。 - 扩展:增加区域面积;收缩:减少区域面积。 ```hdevelop dilation_circle(Region, Radius, DilatedRegion) ``` 2. **opening_circle / closing_circle** - 开运算去除小对象并平滑边界。 - 闭运算填充内部孔洞并连接断开的对象。 ```hdevelop opening_circle(Region, Radius, OpenedRegion) ``` 3. **skeleton** - 计算区域骨架图,适用于分析复杂形态学特征。 ```hdevelop skeleton(Region, SkeletonRegion) ``` 4. **gen_polygon_rounded** - 将任意区域转换为具有光滑边界的近似多边形。 ```hdevelop gen_polygon_rounded(NumPoints, Roundness, Polygon) ``` 5. **clip_region_rect` - 截取指定矩形范围内的区域内容。 ```hdevelop clip_region(RectangleRow1, RectangleColumn1, RectangleRow2, RectangleColumn2, InputRegion, ClippedRegion) ``` 以上每种方法都可以单独调用或者组合使用来实现复杂的图像处理需求。 --- #### Get_Region_Chain vs Get_Region_Contour 虽然两者都与区域轮廓有关联,但是它们之间存在显著差异: - **get_region_chain** 返回的是基于 Freeman 链码形式编码后的数据序列[^1],适合进一步压缩存储以及快速比较相似度场景; - **get_region_contour**, 则直接获取到由像素坐标构成的实际边界点集合列表,更直观也更容易理解可视化效果[^1]. 因此,在实际项目开发过程中应依据具体应用场景选取合适的方式来进行后续计算工作流程设计. --- ### 示例代码展示 下面提供一段简单演示如何利用 subtract_region 进行两块不同图形之间的差集求解过程的例子: ```hdevelop * 创建第一个椭圆作为初始区域 gen_ellipse(EllipseCenterX, EllipseCenterY, SemiAxisMajor, SemiAxisMinor, RotationAngle, Ellipse) * 创建第二个较小偏移位置上的正方形用来做剪切作用力源 gen_rectangle1(SquareTopLeftCornerX, SquareTopLeftCornerY, SquareBottomRightCornerX, SquareBottomRightCornerY, Square) * 对上述两个几何体执行差分逻辑得到最终目标产物 subtract_region(Ellipse, Square, FinalShape) dev_display(FinalShape) ``` 通过运行这段脚本可以看到屏幕上呈现出经过裁剪之后剩余下来的那部分形状图案形象化呈现出来便于观察验证结果正确与否情况发生。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值