例程功能
通过局部阈值和区域后处理提取六边形晶体。
代码如下
dev_close_window ()
dev_update_window ('off')
* ****
* step: acquire image
* ****
read_image (Image, 'crystal')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (Image)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: segment image
* ****
* -> using a local threshold
mean_image (Image, ImageMean, 21, 21)
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')
* -> extract connected components
connection (RegionDynThresh, ConnectedRegions)
dev_display (ConnectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: process regions
* ****
shape_trans (ConnectedRegions, ConvexRegions, 'convex')
select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)
select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)
dev_display (Image)
dev_display (Crystals)
要点
dyn_threshold
——利用局部阈值分割图像;该算子第二个参数为处理后的图像,因此上一步一般会对图像滤波;(比手动设置阈值的threshold
实用);
mean_image (Image, ImageMean, 21, 21) //Image已读
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')
connection
——计算region中相连的成分,即生成了多了无交集的区域;shape_trans
—— 变换区域的形状。接在connect
后面进而提供更多的筛选信息;