Halcon根据灰度特征值选择区域

Halcon根据灰度特征值选择区域

与select_shape算子类似,灰度值图像也可以快捷地根据特征值选择符合设定条件的区域。select_gray算子用于实现这一功能,该算子能接受一组区域作为输入,然后根据选定的特征计算其是否满足特定的条件。当所有区域的特征都计算结束后,图像将在原来的灰度图上输出符合设定条件的区域。该算子的原型如下:

select_gray ( Regions, Image : SelectedRegions : Features, Operation, Min, Max:)

其各参数的含义如下。
参数1:Regions(输入参数),表示图像上待检查的一组区域。
参数2:Image(输入参数),表示输入的单通道图像。
参数3:SelectedRegions(输出参数),表示特征的局部关联性。
参数4:Features(输入参数),表示选择的特征。
参数5:Operation(输入参数),表示低于最大绝对灰度值的百分比。
参数6:Min(输入参数),表示最小的灰度值,默认为128。
参数7:Max(输入参数),表示最大的灰度值,默认为255。
下面以一个例子说明,如所示。其中图(a)为输入的彩图转化的灰度图像,目标是提取湖面区域;图(b)为灰度图像经过阈值分割的结果;图(c)为使用select_shape 算子进行面积筛选的结果,得到了两部分区域。
为了将这两部分区域进一步区分,这里使用了灰度特征中的deviation参数,因为两部分中的灰度偏差明显不同。湖面区域灰度变化比较小,而旁边的村庄区域灰度变化则比较明显,因此使用select_gray算子,用灰度偏差特征可以将偏差较小的湖面区域提取出来。提取结果显示在图(d)中。
在这里插入图片描述
上述过程的代码如下:

*关闭当前窗口
dev_close_window ()
*读取输入图像
read_image (Image, 'data/village')
*获取原始图像的宽和高
get_image_size (Image, Width, Height)
*创建同尺寸的显示图像的窗口
dev_open_window (0, 0, Width, Height, 'white', WindowID)
*将图像转化为灰度图像
rgbl_to_gray (Image, GrayImage)
*使用均值滤波对灰度图像进行平滑处理,以去除细节杂点
median_image (GrayImage, ImageMedian, 'circle', 2, 'mirrored')
*进行阈值处理,提取出较亮部分
threshold (ImageMedian, BrightRegion, 180, 255)
*使用开运算将各区域分离
opening_circle (BrightRegion, RegionClosing,6.5)
*将不连通的区域分隔开来
connection (RegionClosing, BrightRestConnection)
*将面积较大的区域提取出来
select_shape (BrightRestConnection, SelectedRegionsl, 'area', 'and',5000, 99999)
*获取这些区域的平均值和偏差。由于湖面区域灰度变化比较小,因此灰度偏差会比较小
intensity (SelectedRegionsl, ImageMedian, Mean, Deviation)
*以灰度偏差为条件,选出符合条件的区域
select_gray (SelectedRegionsl, ImageMedian, SelectedRegions, 'deviation', 'and',4,10)
dev_clear _window ()
dev_display (GrayImage)
dev display (SelectedRegions)

至此,湖面区域就被提取出来了。在其他检测中,可以多次利用select_gray 算子进行其他灰度
值条件的设定,直到提取出理想的区域。

### 使用Halcon获取区域特征 在图像处理软件Halcon中,可以利用多种算子来提取和计算区域的特征。下面介绍几种常见的方法以及相应的代码示例。 #### 计算基本几何属性 通过`region_features`算子可以直接获得一些基础性的度量数据,比如面积、周长等: ```hdevelop * 输入区域对象 read_image (Image, 'path_to_image') threshold (Image, Region, 128, 255) * 获取区域特性 area_center(Region, Area, Row, Column) disp_message(WindowHandle, 'Area:'+num2str(Area), 'window', Row, Column, 'green', '') * 显示结果 dev_display(Image) dev_set_color('red') dev_display(Region) ``` 上述脚本展示了如何读取图片并转换成二值化后的区域形式,之后调用`area_center`函数求得该区域内像素总数即为面积大小,并显示出来[^1]。 #### 提取形状描述符 对于更复杂的形态学分析,则可借助于`shape_trans`与`features_shape_region`两个工具联合工作,前者用于改变目标轮廓而后者负责量化其具体参数: ```hdevelop * 对输入区域做预处理操作(如必要) dilation_circle (RegionDilation, Region, 1.5) * 转换成边界表示法 gen_contour_region_xld (Contours, RegionDilation) * 测量圆形度和其他形状因子 circularity(Contours, Circularity) compactness(Contours, Compactness) * 输出至控制台查看数值 write_line ('Circularity:', Circularity) write_line ('Compactness:', Compactness) ``` 这里先是对原始ROI进行了膨胀运算以增强边缘效果;接着创建XLD类型的线段列表作为后续评估的基础;最后分别统计圆度系数及紧凑程度这两个重要的表征指标。 #### 统计灰度直方图分布情况 除了纯粹的空间位置关系外,有时还需要关注亮度层次上的变化趋势。此时便能运用到`gray_histo`命令了: ```hdevelop * 准备好待测样本集 reduce_domain (ImageReduced, Image, Region) * 构建累积频数曲线 histo_2dim (ImageReduced, histo, min_gray, max_gray, num_bins) * 展现柱状图直观感受 plot_histogram(histo,min_gray,max_gray,'Gray Value','Frequency') ``` 此部分先是缩小感兴趣范围内的影像尺寸以便加快速度;再建立二维数组存储各区间内出现次数的信息;最终绘制成图形便于观察整体走势特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值