提到区域的特征,最常用的莫过于区域的面积和中心点坐标信息。实际工作中,经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的,该算子一次返回以下两个结果。
(1)面积:指的是单个区域(输入区域可能不止一个)中包含的灰度像素数量。
(2)中心:指的是几何中心点坐标,即单个区域的中心点行坐标均值和列坐标均值。
以一个例子说明,图(a)为输入的图像;图(b)为阈值分割后的图像,其中较亮部分为提取的区域,这些区域将作为area_center 算子的输入;图(c)为求面积与形状中心坐标的结果。其中文字标注的是对应区域的面积,文字的位置为中心位置设置行方向偏移后的位置。
上述过程的代码如下:
dev_close_window ()
*读取图片
read_image (Image,' data/holes')
*设置窗口属性,为了获取窗口句柄,供后面显示文字用
get_image_size (Image, Width, Height)
*创建新窗口
dev_open_window (0, 0, Width, Height, 'black', WindowID)
*将图像转化为单通道灰度图
rgbl_to_gray (Image, GrayImage)
*创建矩形选区,选择感兴趣区域
gen_rectanglel (Rectangle, 180, 83, 371, 522)
reduce_domain (GrayImage, Rectangle, ROI)
*阈值处理,提取图中深色部分,即文字部分。这里阈值设置为50,基本可以提取出所有黑色文字
threshold ( ROI, Region, 0, 80)
*gen_image_proto (ImageReduced, Imagecleared, 0)
*dev_display (Region)
*将提取的整个区域中不相连的部分分割成独立的区域
connection (Region, ConnectedRegions)
*获取不相连的区域的数量
count_obj (ConnectedRegions, Num)
*计算所有不相连区域的面积和中心点坐标。Area 为面积,Row和Column为中心点坐标
area_center (ConnectedRegions, Area, Row, Column)
*输出各区域的面积
for i :=1 to Num by 1
dev_set_color ('red')
select_obj (ConnectedRegions, ObjectSelected, i)
*设定输出文字的起始坐标点
set_tposition (WindowID, Row[i - 1]+40, Columnfi - 1])
*设置输出文字的颜色
dev _set _color ('blue')
*设置字体
set_font (WindowID, '-System-32-*-*-0-0-0-1-GB2312_CHARSET-')
*输出文字内容,即该区域的面积
write_string (WindowID, Area[i-1])
endfor
该代码实现了将输入图像中的较暗的孔洞区域提取出来,计算各个独立区域的面积和中心坐
标,并输出各区域的面积。