特征,就是事物的特定属性,如大的、小的、方形的、圆形的,通过这些特征我们可以找出想要的目标。
在图像处理方面,图像的特征描述了图像某种特性,如面积大小就是区域的一种特征,通过分割形态学得到一些图像区域之后,就可以使用计算的特征作为依据去提取想要的区域,本章将介绍特征即其计算特征的算子。
特征的类型有很多,此章主要介绍如何使用面积、灰度差异大的、区域面积中心等特征进行目标提取。
文章目录:
9.1 区域形状特征
使用形状特征为目标提取依据是较为常见的,下面就介绍与区域形状特征相关的算子。
9.1.1 区域面积和中心点
使用区域面积和中心点坐标可以作为区域选择和定位,如挑选区域最大的区域,area_center就是实现这功能的算子。下面例程将演示如何计算孔洞面积并在孔附近打印显示面积数值。
输入图像:
处理程序:
*清空显示
dev_close_window()
*读取一张照片
read_image(Image, 'quan1')
*获取图像尺寸
get_image_size(Image, Width, Height)
*显示
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*转为灰度图像
rgb1_to_gray(Image, GrayImage)
*划分AOI区域 并提取 等价于==gen_rectangle1()+reduce_domain()
rectangle1_domain(GrayImage, ImageReduced, 100, 150, Height-60, Width-100)
*自适应阈值分割 提取暗的部分
binary_threshold(ImageReduced, Region, 'max_separability', 'dark', UsedThreshold)
*显示暗部
dev_clear_window()
dev_display(Region)
*将联通区域分开
connection(Region, ConnectedRegions)
*获取图像面积和中心坐标
area_center(ConnectedRegions, Area, Row, Column)
*获取不连通区域数量
count_obj(ConnectedRegions, Number)
for i:=1 to Number by 1
*设置显示对象颜色
dev_set_color('red')
select_obj(ConnectedRegions, ObjectSelected, i)
*设定文字输出的起始坐标点
set_tposition(WindowHandle, Row[i-1]+60, Column[i-1])
*设定输出文字颜色
dev_set_color('blue')
*设定字体
set_font(WindowHandle,'-System-24-*-0-0-0-1-GB2312_CHARSET-')
*输出文字内容
write_string(WindowHandle, Area[i-1])
endfor
输出图像:
从控制变量窗口可以看到5个区域面积以及其行坐标和列坐标,上面程序就是通过坐标去确定显示面积文字的坐标的。