QQ登录

只需一步,快速开始

工业视觉halcon 形态学closing函数介绍

[ 复制链接 ]
1.closing(Region, StructElement : RegionClosing : : )
closing操作被定义为膨胀后的闵可夫斯减法。
通过对一个区域进行closing较大的结构基本保持完整,
相邻区域之间的小间隙和小于StructElement 的孔被封闭,区域边界被平滑。
所有closing变量都共享一个属性,即不同的区域没有合并,但仍然是不同的对象。
StructElement的位置是没有意义的,因为关闭操作对于参考点的选择是不变的。


可以使用
gen_circle、
gen_rectangle1、
gen_rectangle2、
gen_ellipse、
draw_region、
gen_region_polygon、
gen_region_points等操作符生成结构化元素(StructElement)。


例程:
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
gen_circle (Circle, 200, 200, 100.5)
closing (ConnectedRegions, Circle, RegionClosing)
执行例程,closing 函数用圆形结构Circle对ConnectedRegions进行闭合运算,
ConnectedRegions内的区域孔洞被填充。

2.closing_circle(Region : RegionClosing : Radius : )
closing_circle的行为类似于上面的 closing函数,
即,对区域边界进行光滑处理,封闭Radius 小于圆形结构单元的区域内的孔洞。
closing_circle操作被定义为一个膨胀,然后是Minkowski减法,两者都具有相同的圆形结构元素。
例程:
dev_update_window ('off')
read_image (Fins, 'fin' + [1:3])
get_image_size (Fins, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
for I := 1 to 3 by 1
  select_obj (Fins, Fin, I)
  dev_display (Fin)
  binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)
  dev_set_color ('blue')
  dev_set_draw ('margin')
  dev_set_line_width (4)
  dev_display (Background)
  disp_continue_message (WindowID, 'black', 'true')
  stop ()
  closing_circle (Background, ClosedBackground, 250)
  dev_set_color ('green')
  dev_display (ClosedBackground)
  disp_continue_message (WindowID, 'black', 'true')
  stop ()
  difference (ClosedBackground, Background, RegionDifference)
  opening_rectangle1 (RegionDifference, FinRegion, 5, 5)
  dev_display (Fin)
  dev_set_color ('red')
  dev_display (FinRegion)
  area_center (FinRegion, FinArea, Row, Column)
  if (I < 3)
    disp_continue_message (WindowID, 'black', 'true')
    stop ()
  endif
endfor
执行例程,可以看到,区域的边缘毛刺被去除了,
这也是这个函数的功能 之一。

3.closing_rectangle1(Region : RegionClosing : Width, Height : )
closing_rectangle1在输入区域Region 上执行一个dilation_rectangle1和一个erosion_rectangle1。
矩形结构单元的大小由参数的Width, Height决定。
与所有closing变量一样,区域边界被平滑,小于矩形结构元素的区域内的孔被闭合。
例程:
* 例程序展示如何使用dots_image分割点打印。
read_image (Image, 'needle1')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 原图像很容易分割,我们将通过在图像中添加背景纹理来增加难度
read_image (ImageNoise, 'angio-part')
crop_part (ImageNoise, ImagePart, 0, 0, Width, Height)
mult_image (Image, ImagePart, ImageResult, 0.015, 0)
* 使用dots_image增强点打印
dots_image (ImageResult, DotImage, 5, 'dark', 2)
threshold (DotImage, Region, 80, 255)
* 下面的代码将各个点连接成字符。
closing_rectangle1 (Region, RegionClosing1, 1, 5)
closing_rectangle1 (RegionClosing1, RegionClosing2, 5, 1)
gen_rectangle2 (Rectangle, 10, 10, rad(45), 3, 0)
closing (RegionClosing2, Rectangle, RegionClosing3)
gen_rectangle2 (Rectangle, 10, 10, rad(135), 3, 0)
closing (RegionClosing3, Rectangle, RegionClosing4)
connection (RegionClosing4, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','height'], 'and', [100,20], [700,40])
*由于closings可能导致合并字符,我们需要再次分离它们。
partition_dynamic (SelectedRegions, Partitioned, 25, 20)
*最后,我们计算字符的原始形状。
intersection (Partitioned, Region, Characters)
dev_set_color ('red')
dev_display (ImageResult)
dev_display (Characters)
  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)





回复

使用道具 举报

快速回复 返回列表 客服中心 搜索