1.1 应用示例目的与思路
(1) 对输入图像进行灰度化、滤波和阈值分割;
(2) 对区域进行填充、连通域分析和面积筛选;
(3) 对区域进行距离变换,对变换后的距离信息图像进行类型转换和图像增强;
(4) 使用分水岭算法提取区域;
(5) 求出区域中重叠的部分,并统计细胞个数。
1.2 应用示例相关算子介绍
(1) binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
功能:使用自动确定的全局阈值分割单通道图像,并在region中返回分割的区域。
图形输入参数:Image:输入图像;
图形输出参数:Region:分割的区域;
控制输入参数1:Method:分割的方法,Method='max_separability',将调用根据Otsu的方法;
控制输入参数2:LightDark:提取前景还是背景;
控制输出参数:UsedThreshold:输出所使用的阈值。
(2) distance_transform(Region : DistanceImage : Metric, Foreground, Width, Height : )
功能:为输入区域的每个点计算该点到区域边界的距离。
图形输入参数:Region:输入区域;
图形输出参数:DistanceImage:包含距离信息的图像;
控制输入参数:Metric:用于距离变换的度量的类型;
控制输入参数:Foreground:计算输入区域内部(‘true’)或外部(‘false’)像素的距离;
控制输入参数:Width:输出图像的宽度;
控制输入参数:Height:输出图像的高度。
(3) convert_image_type(Image : ImageConverted : NewType : )
功能:图像类型转换。
图形输入参数:Image:输入图像;
图形输出参数:ImageConverted:转换后的输出图像;
控制输入参数:NewType:图像类型。
(4) scale_image_max(Image : ImageScaleMax : : )
功能:直方图均衡化。
图形输入参数:Image:待缩放的图像;
图形输出参数:ImageScaleMax:增强后的图像。
(5) watersheds_threshold(Image : Basins : Threshold : )
功能:使用阈值Threshold从图像Image中提取由分水岭相互分隔的区域(流域)。
图形输入参数:Image:输入图像;
图形输出参数:Basins:输出提取的区域;
控制输入参数:Threshold:分水岭的阈值。
(6) gen_contour_region_xld(Regions : Contours : Mode : )
功能:从区域中生成XLD轮廓。
图形输入参数:Regions:输入区域;
图像输出参数:Contours:生成的轮廓;
控制输入参数:Mode:生成的轮廓的模式,参数Mode可以有以下值:'center':边界像素的中心用作轮廓点;border:边框像素的外边框用作轮廓点;'border_holes':除了输入区域的外部边界外,还可以获得所有孔的轮廓。
(7) intersection(Region1, Region2 : RegionIntersection : : )
功能:计算Region1中的区域与Region2中的区域的交集。
图形输入参数:Region1:输入区域1;
图形输入参数:Region2:输入区域2;
图形输出参数:RegionIntersection:输出区域。
1.3 应用示例代码
dev_clear_window()
dev_get_window (WindowHandle)
*读取图片
read_image(cell_img,'./Cell-Pictures/cell2.jpg')
get_image_size (cell_img, Width, Height)
*将图像灰度化
rgb1_to_gray(cell_img,cell_gray_img)
*对图像进行滤波
median_image (cell_gray_img,median_cell_img, 'circle',5, 'mirrored')
*进行阈值分割
*自动全局阈值分割,Method=“max_separability”,将调用根据Otsu的方法
binary_threshold (median_cell_img, Region1, 'max_separability', 'dark', UsedThreshold)
*对孔铜进行填充
fill_up(Region1,Region2)
*连通区域分析
connection (Region2, ConnectedRegions)
*面积筛选
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 50000)
*欧式距离函数的距离变换
distance_transform (SelectedRegions, DistanceImage, 'octagonal', 'true', Width, Height)
*int4转byte
convert_image_type (DistanceImage, ImageConverted, 'byte')
*图像取反
invert_image (ImageConverted, ImageInvert)
*图像比例增强 按最大比例增强对比度
scale_image_max (ImageInvert, ImageScaleMax)
*分水岭算法
watersheds_threshold (ImageScaleMax, Basins, 30)
select_shape (Basins, SelectedBasins, 'area', 'and', 2000, 50000)
gen_contour_region_xld (SelectedBasins, Contours, 'border')
*取出两个区域中重叠的部分
intersection (SelectedBasins, SelectedRegions, RegionIntersection)
dev_display(cell_img)
*设置区域的填充方式
dev_set_draw ('margin')
*设置区域轮廓的输出线宽
dev_set_line_width (3)
*显示区域
dev_display (RegionIntersection)
area_center (RegionIntersection, Area, Row, Column)
*设置输出颜色
dev_set_color ('black')
*设置Cross的输出线宽
dev_set_line_width (2)
gen_cross_contour_xld (Cross, Row, Column, 15, 0.785398)
count_obj (RegionIntersection, Number)
*设置字体颜色
dev_set_color ('green')
*设置文字大小
set_display_font (WindowHandle, 30, 'mono', 'true', 'false')
*设置文字位置
set_tposition (WindowHandle, 235, 300)
write_string(WindowHandle, 'count=' + Number)
结果展示: