Halcon 感兴趣区域

一 感兴趣区域

机器视觉中感兴趣区域是必不可少的,尤其是Halcon。其目的是将集中处理图像中的特定部分。此方法将区域信息与图像矩阵相结合,只与图像中的某些区域保持关联,减少图像处理的像素。使用ROI的优势:第一,减少图像像素的处理。第二,侧重于处理,通常计算灰度值。

1 基本概念

ROI的使用分为两个步骤:①创建区域;②与图像相结合。

1)创建区域

Halcon提供多种创建区域的方法,可以将其创建ROI。传统的方法是生成标准形状、如圆形、椭圆、矩形或多边形。此外,还可以通过从其他数据类型(如XLD)转换为区域分割图像或通过用户交互来派生区域。

2)创建ROI

通过区域与图像相结合,该区域承担起ROI的角色,即它定义必须处理图像的某一个部分。在Halcon中,ROI也被称为图像域。这个源自数学,其中图像可以被视为将坐标映射到灰度图的函数。ROI将该函数的域从完整图像缩小到相关部分。对此,将区域和图像结合的运算称为reduce_domain。这个简单的操作符几乎可以在所有应用程序中完成所需的任务。

3)示例

从文件中读取图像。在图像内部,需要处理中心圆周围的图像区域。可采用gen_circle生成一个圆形区域。使用reduce_domain将该区域与图像组合。这样做的效果是,在调用时,只需要处理ROI像素。例如:如果对该图像应用算子edges_sub_pix,则仅在圆内提取亚像素精度轮廓。

read_image(Image,'D:/Halcon_Study/01.bmp')

gen_circle(ROI,533.27, 860.284, 162.201)

reduce_domain(Image,ROI,ImageReduced)

edges_sub_pix(ImageReduced,Edges,'lanser2',0.5,20,40)

dev_display(Image)

dev_display(ROI)

dev_display(Edges)

在这里插入图片描述
在这里插入图片描述

二 提前轮廓

如果需要研究ROI时则需要编写额外的程序。

1) 图像分割

Halcon常见的创建ROI分割方法。没有预定义的ROI,而是使用图像算法从图像中提取并进一步的处理。可以高效的提取并进行处理,ROI区域分割与blob分析方法类似。

2) 绘制区域

指定ROI的标准是使用鼠标交互式的绘制形状。Halcon提供标准形状和自由形状提供操作。此类算子前缀draw_开头。绘图通过使用鼠标左键(绘制、拾取、拖动)执行,并通过单击鼠标右键完成。并返回参数形成区域。

3)创建区域

常用方法是根据用户交互返回空间域生成区域,可使用gen_circle,gen_rectangle2或gen_region_polygon_fill等。更深层次通过图像预处理获取特殊形状。比如由线、点获取棋盘组成的网格。根据这些形状,可以系统提取图像,并检测指定对象。如想分割图像可使用blob进行操作。

4)处理区域

有时,给定ROI形状,无论是由程序生成的还是用于定义的,都不满足需求。Halcon给需要用户提供修改形状以适应不同需求。可使用算子fill_up填充区域的孔洞,shape_trans应用一般变换,如凸包或最小矩形,或形态学如erosion_circle使区域变小伙closing_circle填充空隙。

5)图像ROI对齐

有时,ROI的坐标取决于图像中另一个对象的位置。如果对象移动,则ROI必须相对移动(对齐)。可以采用模板匹配定位来实现。根据确定的位置和方向,ROI进行相应的变换。

6)创建ROI

这是将区域和图像融合,利用区域作为图像的域。可使用reduce_domain.它的优点是安全且简单。rectangle1_domain是生成矩形ROI的快捷方式(而不是依次调用gen_rectangle1和reduce_domain)。对于高级算法,change_domain可以用作比reduce_domain稍快的版本。

7)可视化结果

可能希望显示ROI或简化图像。使用算子get_domain可以访问任何其他区域的图像。例如,使用disp_image显示像素。图像域以外的图像像素不会被修改。

* 定位标记图像中的靶点
*
dev_update_window('off')
*

* step1:获取图像

read_image(Image,'D:/Halcon_Study/2037551.jpg')
get_image_size(Image,Width, Height)
dev_close_window()
dev_open_window(0,0,Width,Height, 'black', WindowHandle)
dev_set_part(0,0,Height-1,Width-1)
dev_set_line_width(3)
dev_set_color('blue')
dev_set_draw('margin')
dev_display(Image)
set_display_font(WindowHandle,20,'mono', 'true', 'false')

* step2:绘制区域

disp_message(WindowHandle,'用鼠标绘制感兴趣的区域','window',12,12,'blue','false')
dev_set_color('white')
draw_region(Region,WindowHandle)
dev_display(Region)
disp_continue_message(WindowHandle,'black', 'true')
stop()

* step3:创建ROI

reduce_domain(Image,Region,ImageReduced)
disp_continue_message(WindowHandle,'black', 'true')
stop()

* step4:处理ROI图像

critical_points_sub_pix(ImageReduced,'facet',1.5,8,RowMin,ColumnMin,RowMax,ColumnMax,RowSaddle, ColSaddle)
dev_clear_window()
dev_display(ImageReduced)
dev_set_color('yellow')
for i:= 0 to |RowSaddle|-1 by 1
    gen_cross_contour_xld(Cross,RowSaddle[i],ColSaddle[i],25,0.785398)
    dev_display(Cross)
endfor
stop()
dev_update_window('on')

在这里插入图片描述
在这里插入图片描述
琐碎时间阅读基础知识,详情关注微信公众号“知识代码AI”。
在这里插入图片描述

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值