Halcon dyn

编程入门 行业动态 更新时间:2024-10-15 00:24:49

<a href=https://www.elefans.com/category/jswz/34/1769184.html style=Halcon dyn"/>

Halcon dyn

dyn_threshold

原型

dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

功能

利用局部阈值分割图像

参数列表

OrigImage (input_object):原始图像
ThresholdImage (input_object):处理后图像(一般采用滤波处理)
RegionDynThresh (output_object):分割后区域
Offset (input_control):灰度值偏移量。
LightDark (input_control):提取区域类型( ‘dark’, ‘equal’, ‘light’, ‘not_equal’)

详解

如果满足给定的条件,算子会分割出不同区域。具体如下图

ThresholdImage图可以通过mean_image, binomial_filter, gauss_filter等滤波方式处理。
滤波选择的掩膜尺寸越大,提取的区域越大。根据经验,掩膜大小选择应该是要提取目标直径的两倍。参数Offset不要设置0,否则将会提取到很多小的噪点区域,一般介于5-40最佳,其值越大,提取的区域越小。

举例


代码

主函数

* 像素偏移值
Offset := 15
* 加载一幅图像
read_image (Image, 'letters')
* 获取图像尺寸
get_image_size (Image, ImageWidth, ImageHeight)
* 均值滤波
mean_image (Image, ImageMean, 5, 5) 
* Halcon算子
dyn_threshold (Image, ImageMean, OriLightRegion, Offset, 'light')
dyn_threshold (Image, ImageMean, OriDarkRegion, Offset, 'dark')
dyn_threshold (Image, ImageMean, OriEqualRegion, Offset, 'equal')
dyn_threshold (Image, ImageMean, OriNotEqualRegion, Offset, 'not_equal')
* 获取亮、暗、类似、不同Region(根据文档实现算子)
DynThreshold (Image, ImageMean, LightRegion, DarkRegion, EqualRegion, NotEqualRegion, ImageWidth, ImageHeight, Offset)

子函数(速度有点慢,主要目的是加深算子理解)

* 数组存储下标初始化
LightTime := 0
DarkTime := 0
EqualTime := 0
NotEqualTime := 0
* 满足条件数组初始化
tuple_gen_const (0, 0, LightPixelsPositionRowTuple)
tuple_gen_const (0, 0, LightPixelsPositionColTuple)
tuple_gen_const (0, 0, DarkPixelsPositionRowTuple)
tuple_gen_const (0, 0, DarkPixelsPositionColTuple)
tuple_gen_const (0, 0, EqualPixelsPositionRowTuple)
tuple_gen_const (0, 0, EqualPixelsPositionColTuple)
tuple_gen_const (0, 0, NotEqualPixelsPositionRowTuple)
tuple_gen_const (0, 0, NotEqualPixelsPositionColTuple)
* 区域初始化
gen_empty_region (LightRegion)
gen_empty_region (DarkRegion)
gen_empty_region (EqualRegion)
gen_empty_region (NotEqualRegion)
* 遍历一幅图,寻找满足条件的点位置
for ColIndex := 0 to ImageWidth - 1 by 1for RowIndex := 0 to ImageHeight - 1 by 1* 分别获取两张图对应位置的灰度值get_grayval (ImageMean, RowIndex, ColIndex, ImageMeanGrayval)get_grayval (ImageOrig, RowIndex, ColIndex, ImageGrayval)* 寻找亮区域if (ImageGrayval - ImageMeanGrayval >= Offset)LightPixelsPositionRowTuple[LightTime] := RowIndexLightPixelsPositionColTuple[LightTime] := ColIndexLightTime := LightTime + 1endif* 寻找暗区域if (ImageMeanGrayval - ImageGrayval >= Offset)DarkPixelsPositionRowTuple[DarkTime] := RowIndexDarkPixelsPositionColTuple[DarkTime] := ColIndexDarkTime := DarkTime + 1endif* 寻找类似区域if (abs(ImageGrayval - ImageMeanGrayval) <= Offset)EqualPixelsPositionRowTuple[EqualTime] := RowIndexEqualPixelsPositionColTuple[EqualTime] := ColIndexEqualTime := EqualTime + 1endif* 寻找不同区域if ((ImageMeanGrayval - ImageGrayval > Offset) or (ImageGrayval - ImageMeanGrayval > Offset))NotEqualPixelsPositionRowTuple[NotEqualTime] := RowIndexNotEqualPixelsPositionColTuple[NotEqualTime] := ColIndexNotEqualTime := NotEqualTime + 1endifendfor
endfor
* 根据获取的点位信息生成亮区域
tuple_gen_const (LightTime, 0, PhiTuple)
tuple_gen_const (LightTime, 0.1, Length1Tuple)
tuple_gen_const (LightTime, 0.1, Length2Tuple)
gen_rectangle2 (LightRegion, LightPixelsPositionRowTuple, LightPixelsPositionColTuple, PhiTuple, Length1Tuple, Length2Tuple)
union1 (LightRegion, LightRegion)* 根据获取的点位信息生成暗区域
tuple_gen_const (DarkTime, 0, PhiTuple)
tuple_gen_const (DarkTime, 0.1, Length1Tuple)
tuple_gen_const (DarkTime, 0.1, Length2Tuple)
gen_rectangle2 (DarkRegion, DarkPixelsPositionRowTuple, DarkPixelsPositionColTuple, PhiTuple, Length1Tuple, Length2Tuple)
union1 (DarkRegion, DarkRegion)* 根据获取的点位信息生成类似区域
tuple_gen_const (EqualTime, 0, PhiTuple)
tuple_gen_const (EqualTime, 0.1, Length1Tuple)
tuple_gen_const (EqualTime, 0.1, Length2Tuple)
gen_rectangle2 (EqualRegion, EqualPixelsPositionRowTuple, EqualPixelsPositionColTuple, PhiTuple, Length1Tuple, Length2Tuple)
union1 (EqualRegion, EqualRegion)* 根据获取的点位信息生成不同区域
tuple_gen_const (NotEqualTime, 0, PhiTuple)
tuple_gen_const (NotEqualTime, 0.1, Length1Tuple)
tuple_gen_const (NotEqualTime, 0.1, Length2Tuple)
gen_rectangle2 (NotEqualRegion, NotEqualPixelsPositionRowTuple, NotEqualPixelsPositionColTuple, PhiTuple, Length1Tuple, Length2Tuple)
union1 (NotEqualRegion, NotEqualRegion)
return ()

更多推荐

Halcon dyn

本文发布于:2024-03-05 01:01:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710893.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Halcon   dyn

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!