因爱智能

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

还是手册里面的例子,这个回的难度比较大,概念性的东西比较多,例子在Halcon手册Solution Guide I Basics的4.3.1 Crystals里;话不多说贴一下代码:

[plain] view plain copy

  1. * crystal.hdev: extraction of hexagonally shaped crystals via local thresholding and region post-processing  
  2. *   
  3. dev_close_window ()  
  4. dev_update_window ('off')  
  5. * ****  
  6. * step: acquire image  
  7. * ****  
  8. read_image (Image, 'crystal')  
  9. get_image_size (Image, Width, Height)  
  10. dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)  
  11. set_display_font (WindowID, 12, 'Courier', 'true', 'false')  
  12. dev_set_draw ('margin')  
  13. dev_set_line_width (2)  
  14. dev_display (Image)  
  15. disp_continue_message (WindowID, 'black', 'true')  
  16. stop ()  
  17. * ****  
  18. * step: segment image  
  19. * ****  
  20. * -> using a local threshold  
  21. mean_image (Image, ImageMean, 21, 21)  
  22. dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')  
  23. * -> extract connected components  
  24. connection (RegionDynThresh, ConnectedRegions)  
  25. dev_display (ConnectedRegions)  
  26. disp_continue_message (WindowID, 'black', 'true')  
  27. stop ()  
  28. * ****  
  29. * step: process regions  
  30. * ****  
  31. shape_trans (ConnectedRegions, ConvexRegions, 'convex')  
  32. select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)  
  33. select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)  
  34. dev_display (Image)  
  35. dev_display (Crystals)  
  36. *dev_display(LargeRegions)  
        简单说一下图像是检测一张图片里带有六边形特征的晶体结构,检测图片和结果如下:


      代码简单说一下,step: acquire image这段是读取图像并设置显示窗口;

       然后是 step: segment image图像分割这块:

[plain] view plain copy

  1. read_image (Image, 'crystal')  
  2. mean_image (Image, ImageMean, 21, 21)  
  3. dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')  
  4. connection (RegionDynThresh, ConnectedRegions)  
        这里比之前学习的多了一句mean_image(),F1查看意思是图像消除噪点的意思,去除小斑点;

     最后一段 step: process regions,比较重点这里函数一句一句说:

[plain] view plain copy

  1. shape_trans (ConnectedRegions, ConvexRegions, 'convex')  
  2. *变换区域的形状  
  3. select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)  
  4. *区域特征选择,这算子就前面章里说的特征直方块图可以自动生成的代码;  
  5. select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)  
  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;我这里简单实验了一下:改变其末尾的参数,在从低到高得出图像如下:

评论