blob(局部二值化)+特征
基本设置:
dev_update_window ('off')
read_image (Image, 'plastic_mesh/plastic_mesh_01')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle)
set_display_font (WindowHandle, 18, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
*图像采集
for J := 1 to 14 by 1
read_image (Image, 'plastic_mesh/plastic_mesh_' + J$'02')
*图像分割
mean_image (Image, ImageMean, 49, 49) *模糊图像 平滑图像
dyn_threshold (Image, ImageMean, RegionDynThresh, 5, 'dark') *将原图进行滤波模糊处理,用原图和模糊后的图逐个像素做比较(可选取light,dark区域) * 二值化处理
* dark :选择出来的是小于等于ImageMean-5
/*
dyn_threshold(OrigImage,ThresholdImage :RegionDynThresh: Offset, LightDark: )
将原图进行滤波模糊处理,用原图和模糊后的图逐个像素做比较,它可以根据参数分割出原图比模糊后的图灰度高(或者低)若干个灰度值的区域,相当于边界灰度变化大的区域。
OrigImage:原始图像 设为g_o
ThresholdImage:原始图像滤波后图像 设为g_t
RegionDynThresh:输出的region
Offset:计算偏差值
LightDark:
‘light’选择像素值g_o >= g_t + Offset
‘dark’选择像素值g_o <= g_t - Offset
‘equal’选择像素值g_t - Offset<=g_o <= g_t + Offset
‘not_equal’选择像素值g_o < g_t - Offset or g_o >= g_t + Offset
*/
*特征提取面积
connection (RegionDynThresh, ConnectedRegions) *区域连通,可将阈值分割的不相连的区域分割成单个区域,分开,获得单个联通域,
select_shape (ConnectedRegions, ErrorRegions, 'area', 'and', 500, 99999) *区域筛选,根据特征进行,最常用的是根据面积筛选,按照面积特征,特征直方图选择区域
count_obj (ErrorRegions, NumErrors) *计算选择出来的区域个数(网格联通,面积大于上一个算子的筛选值)
dev_display (Image)
dev_set_color ('red')
dev_display (ErrorRegions)
if (NumErrors > 0) *判断区域所选中数目
disp_message (WindowHandle, 'Mesh not OK', 'window', 24, 12, 'black', 'true')
else
disp_message (WindowHandle, 'Mesh OK', 'window', 24, 12, 'black', 'true')
endif
if (J < 14)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor