因爱智能

halcon学习笔记(3)——critical_points例子学习(图像分割Region)

  例子在HDevelop自带例子里面,叫critical_points;目的是在所画的闭合区域内的进行检测图像中的鞍点,鞍点具体是什么我这里也不太了解;以后深入再叙述吧。话不多说先上例子:

例子中输入图像和处理后的图像是这样子:


左边是输入图像,白色的圈是鼠标画出的闭合区域,右边是图像分割后图像,并检测鞍点,就是图中黑白交错的圆圈;我使用的图形如下:

             

                                                                                 实验图片(1)

               

                                                                                 实验图片(2)

从上图可以大概知道鞍点特异性,当然鞍点不是这次重点,重点是检测给定区域内的项目,忽略区域外的区域;代码具体如下:

[plain] view plain copy

  1. dev_update_window ('off')  
  2. * ****  
  3. * step: acquire image  
  4. * ****  
  5. read_image (Image, 'C:/Users/shanwenjun/Desktop/22.png')  
  6. get_image_size (Image, Width, Height)  
  7. dev_close_window ()  
  8. dev_open_window (0, 0, Width, Height, 'black', WindowHandle)  
  9. dev_set_part (0, 0, Height - 1, Width - 1)  
  10. dev_set_line_width (3)  
  11. dev_set_color ('blue')  
  12. dev_set_draw ('margin')  
  13. dev_display (Image)  
  14. set_display_font (WindowHandle, 20, 'mono', 'true', 'false')  
  15. * ****  
  16. * step: draw region  
  17. * ****  
  18. disp_message (WindowHandle, 'Draw with the mouse the region of interest', 'window', -1, -1, 'blue', 'false')  
  19. dev_set_color ('white')  
  20. draw_region (Region, WindowHandle)  
  21. dev_display (Region)  
  22. disp_continue_message (WindowHandle, 'black', 'true')  
  23. stop ()  
  24. * ****  
  25. * step: create ROI  
  26. * ****  
  27. reduce_domain (Image, Region, ImageReduced)  
  28. disp_continue_message (WindowHandle, 'black', 'true')  
  29. stop ()  
  30. * ****  
  31. * step: process image within ROI  
  32. * ****  
  33. critical_points_sub_pix (ImageReduced, 'facet', 1.5, 8, RowMin, ColumnMin, RowMax, ColumnMax, RowSaddle, ColSaddle)  
  34. dev_clear_window ()  
  35. dev_display (ImageReduced)  
  36. dev_set_color ('yellow')  
  37. for i := 0 to |RowSaddle| - 1 by 1  
  38.     gen_cross_contour_xld (Cross, RowSaddle[i], ColSaddle[i], 25, 0.785398)  
  39.     dev_display (Cross)  
  40. endfor  
  41. stop ()  
  42. dev_update_window ('on')  


这里还是一句一句来:

[plain] view plain copy

  1. dev_update_window ('off')  
  2. * ****  
  3. * step: acquire image  
  4. * ****  
  5. read_image (Image, 'C:/Users/shanwenjun/Desktop/22.png')  
  6. get_image_size (Image, Width, Height)  
  7. dev_close_window ()  
  8. dev_open_window (0, 0, Width, Height, 'black', WindowHandle)  
  9. dev_set_part (0, 0, Height - 1, Width - 1)  
  10. dev_set_line_width (3)  
  11. dev_set_color ('blue')  
  12. dev_set_draw ('margin')  
  13. dev_display (Image)  
  14. set_display_font (WindowHandle, 20, 'mono', 'true', 'false')  
  15. * ****  
  16. * step: draw region  
  17. * ****  
  18. disp_message (WindowHandle, 'Draw with the mouse the region of interest', 'window', -1, -1, 'blue', 'false')  
        这上面一段就赘述的,基本是图形界面显示一些基本常用语句,意思大概都如字面意思,具体可以查看F1函数说明,或者看我上一节的内容;这上面的意思大概是:显示一幅图像,然后显示一句话:Draw with the mouse the region of interest;然后你就用鼠标在图像上画圈吧,左键画,右键结束。


[plain] view plain copy

  1. dev_set_color ('white')  

[plain] view plain copy

  1. *设置颜色;  

[plain] view plain copy

  1. <span style="font-family: Arial, Helvetica, sans-serif;">draw_region (Region, WindowHandle)</span>  

[plain] view plain copy

  1. *设置Region画笔  

[plain] view plain copy

  1. dev_display (Region)  

[plain] view plain copy

  1. *显示所画的区域  

[plain] view plain copy

  1. disp_continue_message (WindowHandle, 'black', 'true')  

[plain] view plain copy

  1. *显示一句话:按F5继续  

[plain] view plain copy

  1. stop ()  

[plain] view plain copy

  1. *暂停等待按F5  

[plain] view plain copy

  1. reduce_domain (Image, Region, ImageReduced)  

[plain] view plain copy

  1. *剪切只显示Region区域的图像  

[plain] view plain copy

  1. disp_continue_message (WindowHandle, 'black', 'true')  

[plain] view plain copy

  1. *显示一句话:按F5继续  

[plain] view plain copy

  1. <span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">stop ()</span>  

[plain] view plain copy

  1. *暂停等待按F5  

[plain] view plain copy

  1. critical_points_sub_pix (ImageReduced, 'facet', 1.5, 8, RowMin, ColumnMin, RowMax, ColumnMax, RowSaddle, ColSaddle)  

[plain] view plain copy

  1. *检测鞍点的函数,最后两个参数RowSaddle和ColSaddle是鞍点的xy坐标数组,前面的查看帮助文档吧,这个函数后面具体应该还会用到,原理现  

[plain] view plain copy

  1. *在不太清楚  

[plain] view plain copy

  1. dev_clear_window ()  

[plain] view plain copy

  1. *清空窗口  

[plain] view plain copy

  1. dev_display (ImageReduced)  

[plain] view plain copy

  1. *显示剪切后图像  

[plain] view plain copy

  1. dev_set_color ('yellow')  

[plain] view plain copy

  1. *设置颜色  

[plain] view plain copy

  1. for i := 0 to |RowSaddle| - 1 by 1  

[plain] view plain copy

  1. *循环读取鞍点  
  2.     gen_cross_contour_xld (Cross, RowSaddle[i], ColSaddle[i], 25, 0.785398)  

[plain] view plain copy

  1. *叉子标记,用鞍点的坐标  

[plain] view plain copy

  1. dev_display (Cross)  

[plain] view plain copy

  1. *显示叉子  

[plain] view plain copy

  1. endfor  

[plain] view plain copy

  1. *结束循环  

[plain] view plain copy

  1. stop ()  

[plain] view plain copy

  1. *停止  

[plain] view plain copy

  1. dev_update_window ('on')  

[plain] view plain copy

  1. *停止更新窗口  

这节重点要学习是上面的Region语句,图像分割,在图像检测中非常重要,因为可以缩小检测范围,提高检测速度和准确率,此次的Region只学习例子程序,Region还要在深入,比如画后的如何保存,每次都可在这个范围内检测等等。

评论