4、Halcon图形变量
- 图形变量Image
- 通道:每一个通道可以理解为一个矩阵彼此独立,灰度图是单通道,彩色图(RGB)是三通道
- 像素类型:'int1','int2',int4','int8','byte','real','direction','cyclic','complex'
常见的是byte (8位,一个字节,区间0~255)
- 图像算子
算子--------》Image
- 预处理图像
使用mean_imge或inomial_filter噪声
抑制小斑点或细线使用mean_imge
平滑图像可以使用smooth_image
如果又想平滑图像又想保存边缘,可以尝试anisotropic_diffusion(对于大图像处理时间可能会长)
- 图形变量Region
- Region可以理解为符合某些性质像素的子集,如下图灰度图片通过阈值操作后产生的红色区域就是Region就是选中的区域,它只表示一个区域。黑色覆盖部分在叠加时候可以理解为透明的一块区域。
例子:
*读入一张图片
read_image (Image, 'C:/picture/1.jpg')
*转换为灰度图
rgb1_to_gray (Image, GrayImage)
*进行阈值操作产生一个region
threshold (GrayImage, Regions1, 91, 255)
*清空图形窗口,只显示Regions1
dev_clear_window ()
dev_display (Regions1)
- 也可以通过代来生成规则的region区域
*代码生成region
dev_clear_window ()
gen_circle (Circle, 200, 200, 100.5)
gen_ellipse (Ellipse, 400, 400, 0, 100, 60)
- 鼠标绘画region区域
*鼠标手动绘画生成region
dev_clear_window ()
*当鼠标执行到这里的时候程序会一直卡在这里,直到鼠标在3600窗口(图形窗口)绘画并右键点击后才继续往下执行
draw_region (Region, 3600)
效果:
鼠标左键划区域:
右键单击确认,并自动生成该region
注:region也不一定是一个区域,表示层区域只是它的一种形式,也可以修改它的表示形式为边界:
- Region筛选操作:
有时对图像进行阈值操作时可能会产生很多不感兴趣的region,可以通过它的面积,圆度(圆为1,有缺口或孔则小于1)、宽度等进行筛选:
read_image (Bond, 'die/die_03')
*阈值操作
threshold (Bond, Regions, 0, 59)
*连通域操作,把每个分开的region分离
connection (Regions, SelectedRegions)
*面积筛选操作
select_shape (SelectedRegions, SelectedRegions1, 'area', 'and', 150, 5000)
- 计算每个连通域region的中心坐标以及面积
area_center (SelectedRegions1, Area, Row, Column)
- Region联合操作:
- Region转换操作shape_trans:
例子:下面以'convex'为例子。选择发这个参数是可以填充他的凹角
*读入一张图片
read_image (Image, 'C:/picture/1.jpg')
*转换为灰度图
rgb1_to_gray (Image, GrayImage)
*进行阈值操作产生一个region
threshold (GrayImage, Regions1, 91, 255)
shape_trans (Regions1, RegionTrans, 'convex')
gen_polygons_xld (xld2, Polygons2, 'ramer', 2)//把xld contour转换为xld polygon
select_shape_xld (Border, SelectedXLD, 'circularity', 'and', 0.8, 1)
select_shape_xld (Border, SelectedXLD, 'convexity', 'and', 0.8, 1)
select_shape_xld (Border, SelectedXLD, 'anisometry', 'and', 1.4, 9999999)
select_shape_xld (Border, SelectedXLD, 'max_diameter', 'and', 0, 7)
union_cocircular_contours_xld (Border_xld, UnionContours, 0.5, 0.1, 0.2, 30, 10, 10, 'true', 1)
union_adjacent_contours_xld (Border_xld, UnionContours2, 10, 1, 'attr_keep')
union_collinear_contours_xld (Border_xld, UnionContours1, 100, 100, 2, 0.1, 'attr_keep')
shape_trans_xld (Border_xld, XLDTrans, 'convex')
segment_contours_xld (Border_xld, ContoursSplit, 'lines_circles', 5, 4, 2)