一 如何填充区域之间的GAP或分割重叠区域
read_image(Image,'fabrik')
*区域生长法将图像分割成相同强度的区域,并将其划分成大小为行*列的矩形。 为了确定两个相邻的矩形是否属于相同的区域,
*仅使用其中心点的灰度值。 如果灰度值差小于等于公差,则将矩形合并到一个区域。
regiongrowing(Image,Regions,1,1,3,1000)
gen_empty_region(NoPixel)
expand_region(Regions,NoPixel,RegionExpanded1,'maximal','image')
dev_display(Image)
dev_set_draw('margin')
dev_set_colored(6)
dev_display(RegionExpanded1)
stop()
二 如何在窗口上显示汉字
dev_close_window()
read_image(image,'particle')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width,Height,'black',WindowID)
dev_set_draw('margin')
dev_set_color('green')
threshold(image,Region,128,255)
connection(Region,ConnectedRegions)
select_shape_std(ConnectedRegions,SelectedRegions,'max_area',70)
area_center(SelectedRegions,Area,Row,Column)
dev_display(image)
dev_display(SelectedRegions)
set_tposition (WindowID, Height/2,0)
write_string (WindowID, '面积最大区域的行坐标:'+Row+' 面积最大区域的列坐标: '+Column)
三 图像分割之地形学操作1.分水岭介绍
1 分水玲介绍
传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是地质学上的拓扑地貌,图像中每一像素的灰度值表示该点的海拔高度,每一个局部极小值及其周边区域称为集水盆地,而集水盆地的边界则形成分水岭。
2 相关概念
局部极小值点:该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是最小值点。
3 分水玲原理
假设我们在盆地的最小值点,打一个洞,然后往盆地里面注水,并阻止两个盆地的水汇集,我们会在两个盆地的水汇集的时刻,在交接的边缘线上(也即分水岭线),建一个坝,来阻止两个盆地的水汇集成一片水域。这样图像就被分成2个像素集,一个是注水盆地像素集,一个是分水岭线像素集。
dev_close_window()
read_image(image,'particle')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width/2,Height/2,'black',WindowID)
dev_set_draw('margin')
dev_set_colored(12)
dev_clear_window()
*高斯滤波
gauss_filter(image,ImageGauss,9)
*图像反选
invert_image(ImageGauss,ImageInvert)
*从图像里提取分水玲和盆地
*第一个输入参数:输入图像
*第二个输出参数:分割后的盆地区域
*第三个输出参数:分割后的分水岭区域
watersheds(ImageInvert,Basins,Watersheds)
dev_display(image)
dev_display(Basins)
四 图像分割之阈值操作一
1 auto_threshold自动阈值
dev_close_window()
read_image(image,'egypt1')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width, Height, 'black', WindowHandle)
dev_clear_window()
*根据图像的灰度直方图来确定阈值,这里的Sigma是高斯滤波器,用于直方图的平滑
Sigma:=4
auto_threshold(image,Regions,Sigma)
2 binary_threshold二值化阈值
dev_close_window ()
read_image (image, 'egypt1')
get_image_size (image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_clear_window ()
*使用二值化阈值分割图像
*如果LightDark =“light”,则选择灰度值大于或等于最佳阈值的所有像素。
*如果LightDark =“dark”,则选择灰度值小于的最佳阈值de 所有像素。
*通过选择Method ='max_separability',可以调用灰度直方图的自动阈值。
*该算法首先计算图像的直方图,然后使用统计矩来找到将像素划分为前景和背景的最佳阈值,
*并使这两个类之间的可分离性最大化。 此方法仅适用于字节和uint2图像。
binary_threshold (image, RegionMaxSeparabilityLight, 'max_separability', 'dark', UsedThreshold)
3 char_threshold字符提取
dev_close_window()
read_image(image,'alpha1')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width,Height,'black', WindowHandle)
dev_clear_window()
*阈值分割提取字符,主要应用是在明亮的纸上分割黑色字符单通道图像
*第一个输入参数:图像
*第二个输入参数:要计算直方图的区域
*第三个输出参数:分割的字符区域
*第四个输入参数:直方图高斯平滑的Sigma
*第五个输入参数:灰度值差异的百分比
*第理工输出参数:输出计算出的阈值
char_threshold(image,image,Characters,6,95,Threshold)
4 dual_threshold分割
*读取一张图像
read_image(Traffic1,'traffic1')
*读取一张图片
read_image(Traffic2,'traffic2')
*将图像由byte类型转化为int2类型
convert_image_type(Traffic1,ImageConverted1,'int2')
*将图像由byte类型转换为int2类型
convert_image_type(Traffic2,ImageConverted2,'int2')
*将两个图像相减
sub_image(ImageConverted1,ImageConverted2,ImageSub,1,0)
*将有符号图像分割为正负两个区域
*第一个输入参数:图像
*第二个输出参数:分割后的正负区域
*第三个输入参数:最小区域大小
*第四个输入参数:最小灰度值大小
*第五个输入参数:阈值
dual_threshold(ImageSub,RegionDiff,500,20,10)
五 图像分割之阈值操作二
1 dyn_threshold局部阈值
dev_close_window()
read_image(image,'egypt1')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width,Height,'black',WindowID)
dev_clear_window()
mean_image(image,ImageMean,9,9)
*用局部阈值来分割图像
*第一个输入参数:原始图像
*第二个输入参数:滤波后的图像
*第三个输出参数:分割后的区域
*第四个输入参数:补偿值,范围在5到40之间比较有用
*第五个输入参数:提取区域的类型,是亮的区域,或暗的区域,或相似区域
dyn_threshold(image,ImageMean,RegionDynThresh,15,'not_equal')
2 threshold固定阈值
dev_close_window()
read_image(image,'egypt1')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width/2,Height/2,'black',WindowID)
dev_clear_window()
*用全局阈值分割图像,试用图像亮度均匀的场合
*第一个输入参数:输入图像
*第二个输出参数:分割后的区域
*第三个输入参数:阈值下限
*第四个输入参数:阈值上限
threshold(image,Region,0,150)
3 var_threshold局部阈值
dev_close_window()
read_image(image,'label_01')
get_image_size(image,Width,Height)
dev_open_window(0,0,Width/2,Height/2,'black', WindowHandle)
dev_clear_window()
*通过局部平均值和标准偏差进行阈值图像。试用场合不均匀的照明或噪声的图像
*第一个输入参数:输入图像
*第二个输出参数:分割后的区域
*第三个输入参数:均值和标准差的掩码宽度
*第四个输入参数:均值和标准差的掩码高度
*第五个输入参数:标准差因子
*第六个输入参数:最小灰度值和均值之差
*第七个输入参数:提取区域的类型,是亮的区域,或暗的区域,或相似区域,或不相似区域
var_threshold(image,Region,15,15,1.0,40,'dark')