halcon学习笔记(6)——学习Crystals例子的凸包及图像熵

还是手册里面的例子,这个回的难度比较大,概念性的东西比较多,例子在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例子的凸包及图像熵
文章图片


【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学习笔记(6)——学习Crystals例子的凸包及图像熵
文章图片





    推荐阅读