目录
- 一. 常规操作类
- 1.1 tuple_length()
- 1.2 tuple_find_first()
- 1.3 tuple_gen_const()
- 二. 机器视觉操作类
- 2.1 read_image()
- 2.2 get_image_size()
- 2.3 intensity()
- 2.4 zoom_image_factor()
- 2.5 median_image()
- 2.6 Gauss_filter()
- 2.7 fft_generic()
- 2.8 convol_fft()
- 2.9 sub_image()
- 2.10 binary_threshold()
- 2.11 area_center()
- 2.12 select_shape()
- 2.13 connection()
- 2.14 closing_circle()
- 2.15 overpaint_region()
- 2.16 union1 ()
- 2.17 threshold()
- 2.18 crop_part()
新手在刚接触Halocon时往往不明所以,而官方文档上的解释又让初学者云里雾里,本文整理了halocon常用算子(库函数),供开发者快速查阅。
一. 常规操作类
1.1 tuple_length()
tuple_length(Area0,len)
数组里元素的个数
1.2 tuple_find_first()
tuple_find_first(Area0,sMax,i)
找到第一个是sMax的,返回索引
1.3 tuple_gen_const()
创建数组 tuple_gen_const( : : Length, Const : Newtuple)
二. 机器视觉操作类
2.1 read_image()
读取图片
2.2 get_image_size()
获取图片尺寸
2.3 intensity()
Regions (input_object) region(-array) → object
Regions in which the features are calculated.
计算特征的区域。
Image:输入灰度图
Mean:输出区域的平均灰度值
Deviation:输出区域内灰度值的偏差。
2.4 zoom_image_factor()
zoom_image_factor(Image, ImageZoomed, 0.15, 0.125, ‘constant’)
高斯降采样。
2.5 median_image()
median_image (Image, ImageMedian, ‘circle’, 2, ‘mirrored’)
Image:输入图像
ImageMedian:输出图像
参数3:掩码的形状 ‘circle’ 圆; ‘square’ 正方形
参数4: 掩码半径
参数5:边界处理。建议值: ‘mirrored’, ‘cyclic’, ‘continued’, 0, 30, 60, 90, 120, 150, 180, 210, 240, 255
2.6 Gauss_filter()
gauss_filter (Image, ImageGauss, 9)
Image:输入图像
ImageGauss:输出图像
参数3:过滤器大小;建议值: 3, 5, 7, 9, 11
2.7 fft_generic()
空间域和频域之间的转换,主要有如下两个关键算子rft_generic()、fft_generic()。
这两个算子的共同点:
1.这两个算子都是进行快速傅里叶变换的算子
2.这两个算子都可以进行空间域-》频域和频域-》空间域的变换,只需要针对参数Direction分别进行选择,‘to_freq’是进行的是空间域-》频域的变换,‘from_freq’是频域-》空间域的变换。
3.rft_generic算子的输入图像是实值函数,fft_generic的输入图像是复数函数;从输出的结果来看,rft_generic只需要计算和存储了左半边的复数图像信息就可以了,因为右半边是共轭对称的。因此从最终的输出我们可以看到,只有左上和左下有DC成分。而fft_generic如果设定的是原点在左上角,那么就会在四个角上有DC成分。
4.fft_generic算子可以通过参数Mode设置原点的位置:如果设置的是’dc_edge’,那么原点在左上角;如果设置的是’dc_center’,那么就会将原点平移到中心位置。fft_generic算子一般会设置为’dc_center’。对于rft_generic算子,因为没有设置项,所以默认原点位置为左上角。
5.针对同一个图像,进行空间域-》频域、频域-》空间域的转换的时候,如果使用的是rft_generic算子,那么两个转换就都使用该算子;如果使用的是fft_generic算子,那么两个转换也都使用该算子,在对同一个图像进行空间域和频域的相互转换时,不要交叉使用这两个算子。
当然,从空间域到频域的转换,也可以使用算子fft_image,这个算子也是快速傅里叶变换,其实际效果相当于:
fft_generic(Image,ImageFFT,‘to_freq’,-1,‘sqrt’,‘dc_center’,‘complex’)
Image:输入图像
ImageFFT:输出图像
to_freq:转到频域
‘-1’:默认
‘sqrt’:默认
‘dc_center’:默认
‘complex’:默认
2.8 convol_fft()
一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。
1.具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现。
2.需要提取对比度低或者信噪比低的特征。
3.图像尺寸较大或者需要与大尺寸滤波器进行计算,此时转换至频域计算,具有速度优势。因为空间域滤波为卷积过程(加权求和),频域计算直接相乘。
使用频域进行检测,有两个步骤是比较关键的:
1.一个是生成合适的滤波器;
2.一个是空间域和频域之间的转换。
2.9 sub_image()
sub_image(ImageMinuend , ImageSubtrahend : ImageSub : Mult , Add 😃
ImageMinuend :输入的被减图像
ImageSubtrahend:减数图像
ImageSub:结果图像
Mult:乘数因子
Add:灰度补充值
2.10 binary_threshold()
binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
Image :要分割的图像
Region :分割后的区域
Method:分割方法,提供了两种方法:‘max_separability’和’smooth_histo’。这两种方法只能用于具有双峰直方图的图像
LightDark :提取暗背景还是亮背景
UsedThreshold:使用阈值
示例:
binary_threshold(Sub0, region, 'max_separability', 'dark', UsedThreshold)
从图像中分割出
2.11 area_center()
area_center (region, A, Row, Column)
计算每个区域的面积 中心坐标
2.12 select_shape()
select_shape(Regions: SelectedRegions: Features, Operation, Min, Max: )
借助形状特征选择区域。
Regions: 输入区域元组
SelectedRegions:输出满足条件的区域元组
Features:输入参数形状特征(‘anisometry’, ‘area’, ‘area_holes’, 'bulkiness’等)
Operation:输入参数关系符(‘and’, ‘or’)如果features只是用一种特性那么此参数没有意义
Min、Max:输入参数下限上限值
示例:
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
选择区域面积范围
2.13 connection()
connection(Region, ConnectedRegions)
Region表示需要计算的输入图像区域
ConnectedRegions表示输出图像区域
示例:
connection (regions, ConnectedRegions)
对区域中的子连通集进行操作。
2.14 closing_circle()
closing_circle(Region: RegionClosing : Radius)
Region:输入区域
RegionClosing:输出结果区域
Radius:输入使用的圆形结构的圆半径 0.5 ≤ Radius ≤ 511.5 (lin)
使用圆形结构元素来闭合一个区域。
示例:
closing_circle (RegionUnion, RegionClosing, 5)
使用圆形结构元素来闭合一个区域,只要是在区域内并且小于输入圆形半径的孔都会被闭合
2.15 overpaint_region()
color := [255,255,0]
*RGB红色+绿色
*黄色
*用指定颜色填充指定区域
*Image:待绘制的图像
*Region:待绘制的区域
*color:颜色
*margin:填充类型
-
'fill' 填充全部区域
-
'margin' 只填充边界
示例:
overpaint_region (Image, Region, color, 'margin')
2.16 union1 ()
union1 (Region, RegionUnion)
将所有区域合并成一个区域。
参数1:要计算并集的区域
参数2:输出区域
示例:
union1 (SelectedRegions, RegionUnion)
2.17 threshold()
threshold(Image : Region : MinGray, MaxGray : )
使用全局阈值分割图像。
Image (input_object) :输入图像
Region (output_object) :阈值分割后Region
MinGray (input_control):设置的最小阈值(灰度值)
MaxGray (input_control) :设置的最大阈值(灰度值)
其中要满足MaxGray >= MinGray
示例:
#全局阈值分割出两个区域
threshold (Image, Region, [0, 107], [106, 255])
2.18 crop_part()
crop_part(Image : ImagePart : Row, Column, Width, Height : )
用来截取感兴趣区域。
Image:原图像
ImagePart:截取的图像
Row、Column:图像截取的起始点坐标
Width、Height:截取图像的宽、高
示例:
crop_part(Image,imgCut,100,100,1200,1200)