还是手册里面的例子,这个回的难度比较大,概念性的东西比较多,例子在Halcon手册Solution Guide I Basics的4.3.1 Crystals里;话不多说贴一下代码:
* crystal.hdev: extraction of hexagonally shaped crystals via local thresholding and region post-processing
*
dev_close_window ()
dev_update_window ('off')
* ****
* step: acquire image
* ****
read_image (Image, 'crystal')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)
set_display_font (WindowID, 12, 'Courier', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (Image)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: segment image
* ****
* -> using a local threshold
mean_image (Image, ImageMean, 21, 21)
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')
* -> extract connected components
connection (RegionDynThresh, ConnectedRegions)
dev_display (ConnectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: process regions
* ****
shape_trans (ConnectedRegions, ConvexRegions, 'convex')
select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)
select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)
dev_display (Image)
dev_display (Crystals)
*dev_display(LargeRegions)
简单说一下图像是检测一张图片里带有六边形特征的晶体结构,检测图片和结果如下:
文章图片
【halcon学习笔记(6)——学习Crystals例子的凸包及图像熵】代码简单说一下,step: acquire image这段是读取图像并设置显示窗口;
然后是 step: segment image图像分割这块:
read_image (Image, 'crystal')
mean_image (Image, ImageMean, 21, 21)
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')
connection (RegionDynThresh, ConnectedRegions)
这里比之前学习的多了一句mean_image(),F1查看意思是图像消除噪点的意思,去除小斑点;
最后一段 step: process regions,比较重点这里函数一句一句说:
shape_trans (ConnectedRegions, ConvexRegions, 'convex')
*变换区域的形状
select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)
*区域特征选择,这算子就前面章里说的特征直方块图可以自动生成的代码;
select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)
*灰度特征选择
在手册里介绍shape_trans(Region : RegionTrans : Type : )算子内容,本段是从网上收集:
函数作用:变换区域的形状
参数Type的可选项解释如下:
convex:凸包性
ellipse:与输入区域有相同的矩和区域的椭圆
outer_circle:最小外接圆
inner_circle:最大内接圆
rectangle1:平行于坐标轴的最小外接矩形
rectangle2:最小外接矩形
inner_rectangle1:平行于坐标轴的最大内接矩形
inner_rectangle2:输入区域的骨架点拥有同输入区域的重心点最小的距离
这里用的convex:凸包性,凸包的意思是:从直观上说,一个凸多边形就是没有任何凹陷位的多边形。具体的解释可查看这个网站的解释很全面:http://wiki.mbalib.com/wiki/%E5%87%B8%E5%8C%85;
最后说一下算子select_gray(Regions, Image : SelectedRegions : Features, Operation, Min, Max : ) ,这是个基于灰度的选择算子,其Features可选的值有很多,在F1帮助里就可以查看到,网上资料不多,这此例子用了一个'entropy',这个值的意思是熵;图像熵的意思为:是指图像的“混乱”程度,这个和信息论中的熵基本类似;具体的计算和由来可以参看这篇:http://blog.sina.com.cn/s/blog_50e7455c01019l2k.html;我这里简单实验了一下:改变其末尾的参数,在从低到高得出图像如下:
文章图片
推荐阅读
- 机器视觉检测的基础知识——分辨率,精度,公差
- 图像处理|halcon模板匹配学习(一) Matching 初印象
- halcon教程|halcon算子讲解系列---目录
- Halcon|Blob分析的例子,抽取Blobs
- 关于halcon基于表面的3d识别定位
- opencv|基于openCV的形状模版匹配
- Visual|Halcon和Visionpro的对比
- 基于HALCON的模板匹配方法总结
- Blob分析的基本概念和实现流程