目录
2、循环,在循环中通过自动阈值分割、开运算对图像进行预处理。然后使用area_holes计算孔的面积并使用rectangularity计算ROI区域矩形度
1、binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
2、area_holes(Regions : : : Area)
3、rectangularity(Regions : : : Rectangularity)
这个例子演示了榛子饼干的质量检验,还展示了操作符area_holes的用法。利用形态学工具,根据矩形(rectangular)和区域孔(AreaHoles)等形状特征提取和检测
read_image (Image, 'food/hazelnut_wafer_01')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_update_window ('off')
dev_set_line_width (3)
dev_set_draw ('margin')
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')
for Index := 1 to 24 by 1
read_image (Image, 'food/hazelnut_wafer_' + Index$'.02')
binary_threshold (Image, Foreground, 'smooth_histo', 'light', UsedThreshold)
opening_circle (Foreground, FinalRegion, 8.5)
area_holes (FinalRegion, AreaHoles)
rectangularity (FinalRegion, Rectangularity)
dev_display (Image)
*根据条件判断该饼干是否合格,并显示结果
if (AreaHoles > 300 or Rectangularity < 0.92)
dev_set_color ('red')
Text := 'Not OK'
else
dev_set_color ('forest green')
Text := 'OK'
endif
dev_display (FinalRegion)
disp_message (WindowHandle, Text, 'window', 12, 12, '', 'false')
if (Index < 24)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
定义:使用二值阈值分割图像
binary_threshold使用自动确定的全局阈值对单通道图像进行分割,并返回region中的分割区域,还在UsedThreshold中返回已使用的阈值。这对于在均匀光照的背景上分割字符很有用
目前该操作符提供了以下两个方法:'max_separability'和'smooth_histo'。这两种方法都只能用于具有双峰直方图的图像
'smooth_histo'提供了操作符bin_threshold提供的相同功能
'max_separability'方法倾向于为UsedThreshold确定更小的值。此外,它对直方图中远离其他光谱的稀疏孤立峰值不太敏感,而且通常比'smooth_histo'更快
参数:输入图像,输出分割区域,阈值分割方法,提取前景或背景,返回使用的阈值
定义:计算区域孔的面积
面积定义为孔中包含的像素的数量。如果一个区域有多个孔,则返回该区域内所有孔的面积之和。邻域类型通过set_system('neighborhood',<4/8>)设置(默认值:8-neighborhood)
参数:要检查的区域,该区域孔的面积
定义:计算输入区域的矩形度
对于矩形,rectangular返回值为1。输入区域偏离完美矩形越多,矩形的返回值就越小
参数:要检查的区域,输出该区域矩形度