Halcon图像处理入门篇(一)

Halcon图像处理

图像处理大致可以分为两大部分。即,基于传统图像的处理方式及基于深度学习的处理方式。两者的区别在于,传统的图像处理方式一般是通过人的主观分析判断进而获取特征,以便得到可解释性的结果输出。而基于深度学习的图像处理方式强调的是学习,即数据量的大小。一般来说数据量越大学习效果越好。但=不管哪种方式,两者都强调对图像的准确描述,即图像的数学描述。halcon是一款非常高效的传统图像处理工具,但比不意味着它是一款高效的图像处理工具。在深度学习上,halcon除了提供几个模型接口以外几乎毫无作用。所以,一般基于halcon的图像处理方式都是传统的图像处理方式。当然,halcon也在不断的努力中,也期待其后续的发展,特别是在深度学习上的进步。

1、halcon的图像类型

在halcon中主要又这两类图像:1、Region 2、XLD 这是两种不同的数据类型,Region一般指的是面积区域,XLD一般指的是区域轮廓。
简单的使用规则示例如下:

*1、针对区域
threshold(Image,Region,0,2)
connection(Region,ConnectRegion)
count_obj(ConnectRegion,RegionNumber)
if(RegionNumber>1)
    select_shape(ConnectRegion,SelectRegion,['height','rect2_len1'],'and',[300,1000],[600,1800])
    smallest_rectangle2(SelectRegion,R,C,Pi,L1,L2)
    gen_rectangle2(Rectangle,R,C,Pi,L1,L2)
    rectangularity(SelectRegion,RecValue)
    
*2针对轮廓
edges_sub_pix (Image, Edges, 'sobel', 0.5, 40, 50)
gen_polygons_xld (Edges, Polygons, 'ramer', 1)
split_contours_xld (Polygons, SplitContours, 'polygon', 1, 5)
regress_contours_xld (SplitContours, RegressContours, 'drop', 1)
*select_contours_xld (RegressContours, SelectedContours, 'direction', 0,0.01, 0, 5)
*筛选目标轮廓
select_contours_xld (RegressContours, SelectedContoursFinal, 'length', 500, 1500, -0.5, 0.5)
fit_line_contour_xld (SelectedContoursFinal, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

2、halcon的基本组成

halcon除了基本的图像类型组成以外还有数据类型的组成,以及逻辑结构。数据类型有矩阵、数组。逻辑结构有for、if、while等。当然,halcon还支持常用的数学表达式及数学运算符,比如sin,abs,atan等。除了这些外halcon还具有窗口类型,可以对特定的窗口进行处理。

3、基于halcon的图像处理

A、阈值处理
1、固定阈值
步骤如下:
Step1
Step2
固定阈值的缺点很明显,那就是鲁棒性极差,只要图片稍微改变一点曝光或者位置就很难找到目标区域,所以在现实的应用中往往相对比较少考虑用固定阈值的方法去解决问题。
动态阈值常用的算子是dyn_threshlod()。动态阈值一般要和滤波器结合使用,通过阈值的变化动态调整区域得到最终的Region输出。当然,也可以通过local_threshold()来实现对特定Region的输出,并且不需要借助滤波器,但是效果往往不佳。
B、轮廓处理
轮廓处理也可以叫边沿处理。在实际应用过程中轮廓处理往往具有较为好的效果,特别是在一些具体的应用场景中。如背景较暗的情况下找目标,曝光较高或者照片不是很清晰的情况下找目标等。和找Region几乎一样,找轮廓也用固定阈值法和动态阈值法。一般固定阈值会采用threshold_sub_pix实现,动态阈值的话edges_sub_pix()可能会比较常见谢。同样,在实际情况下,为了提升算法的泛化性,推荐使用动态阈值发。
C、噪声过滤
常见的滤波网络有拉普拉斯滤波网络,canny滤波,高斯滤波等。当然,传统的方法和深度学习方法还是有很大的差别的。传统的方法在初筛时可能会以来滤波器,但实际在后续的各种条件筛选才是算法成败的关键。而且在很多情况下根本不需要滤波处理。深度学习就不一样了,一般来说对采用正负样本的深度学习方法而言,基本上没有噪声这个概念,也可以所除了特征意外都是噪声,但是特征本身又包含噪声特征。这种方法其实优缺点很明显,少量数据情况下能够大致描述特征,但是要实现准确的特征描述必然要求较大的数据量。
D、基本图形处理
1、膨胀腐蚀
2、生成最小外接圆或矩形等
3、测量(面积,边界,圆度/矩形度,边长、角度等)
E、画图
halcon处理过程中得到的彩色变量参数实际是不被输出的,在输出过程中如果想要得到相应的图像就必须通过画图的形式获取。画图的方法一般几个paint函数实现。如overpaint_region()值得注意的是,halcon里的paint函数相比Opencv实际用起来并不方便,由于比较接近应用的原因是的halcon在函数设计的时候就没有考虑函数本身的准确表述,二是更加多的考虑了自身框架因素,所以许多Opencv里存在的定义都在halcon中很难被找到,期待halcon能够早日解决该问题,提供更多更加准确的函数定义及接口。
** 简单的画图:**

gen_image_const (Image, 'byte', 600, 300)
scale_image (Image, Image, 0, 255)
Row :=[100,200]
Column :=[150,150]
for i:=0 to 40 by 1
    gen_region_line(Line1,Row[0],Column[0]+i,Row[1],Column[1]+i)
    overpaint_region(Image,Line1, 30, 'fill')
endfor
gen_region_line(Line1,Row[0],Column[0],Row[1],Column[1])
overpaint_region(Image,Line1, 30, 'fill')
Row2 :=[100,100]
Column2 :=[150,300]

copy_image (Image, ImageR)
copy_image (Image, ImageG)
copy_image (Image, ImageB)

gen_region_line(Line2,Row2[0],Column2[0],Row2[1],Column2[1])
overpaint_region(ImageR,Line2, 255, 'fill')
overpaint_region(ImageG,Line2, 0, 'fill')
overpaint_region(ImageB,Line2, 0, 'fill')
compose3 (ImageR, ImageG, ImageB, OutImage)
write_image(OutImage, 'bmp', 0, 'test')

效果:
效果图

4、C++halcon联合编程

1、图像变量
Region变量一般定义为 HObject类型,数值类型定义为HTuple类型。其中HTuple类型具有动态数组特性。
2、逻辑语句
由于数据类型及使用方法不同,逻辑语句在使用上会略微有所不同,但基本逻辑将保持一致,提供是基本不影响运行速度。
4、函数引用

5、总结

1、基于Halcon的图像处理方法由于封装了大量的自带算子及可视化、各种语言的转换操作。极大的便捷了基于图像的处理的代码开发。
2、Halcon始终是一种图像处理脚本,在很多问题的定义上可能并不能和开发过程所需的定义一致,这里需要进一步的对现有算子进行封装使用。
3、要从实际场景和原理出发考虑现有算子的适用性,进而对其进行封装改进或者选择更合适的算子。

  • 7
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值