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例子的凸包及图像熵_第1张图片

      代码简单说一下,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例子的凸包及图像熵_第2张图片


        

你可能感兴趣的:(halcon)