阈值分割引言
阈值分割有非常多的算法,大体上分为全局和局部算法。 全局算法包括全局固定阈值和基于图像直方图的阈值,局部算法包括局部动态阈值分割。 基于图像直方图阈值分割的方法也有很多,比如常规的高斯滤波双峰法,OTSU大津法。 但是这类所有的法都基于一个假设:图像是有前景和背景的,待分割目标处于背景中,即图像直方图是双峰的。 如果因为非均匀光照导致待分割目标不处于背景或前景中,即图像直方图无双峰, 那么基于图像直方图的所有法都是不甚理想的 只能在此基础上进行一定的变换,例如nbl算法等,这些都属于局部算法。 任何算法,都会基于假设空间的。没有假设空间,所有算法性能一致。包括经典算法和深度学习算法。 本系列的贴子勇哥通过实验来细品它们之间的差别,以求以后可以精准应用。
这一节要谈的拓扑分割算子是pouring:
pouring(Image : Regions : Mode, MinGray, MaxGray : )
倒入会将输入图像视为“山脉”。较大的灰度值对应于山峰,而较小的灰度值对应于谷底。
pouring分几步对输入图像进行分割。
首先,提取局部最大值,即,单独像素或以扩展平台的形式具有比其直接邻居更大的灰度值(在4个邻居中)。
在下一步中,由此找到的最大值是扩展的起点,直到达到“谷底”。
只要存在灰度值变小的像素链,就可以进行扩展(就像水从各个方向的最大值向下流一样)。
同样,使用4邻域,但条件较弱(较小或相等)。
这意味着谷底的点可能属于一个以上的最大值。
首先,这些区域没有分配给一个区域,而是在最后一步中将其划分为所有竞争段。
通过均匀扩展所有相关段来进行拆分,直到分配了所有模糊像素为止。
参数 Mode确定执行哪些步骤。可能有以下值:
'all'
这是正常的操作模式。执行分割的所有步骤。将区域分配给最大值,并分割重叠区域。
'maxima'
分割仅提取输入图像的局部最大值。没有提取相应的区域。
“regions”
分割提取唯一确定的输入图像的局部最大值和相应区域。分配给一个以上最大值的区域不会拆分。
为了防止算法分割不同于图像其余部分的均匀背景,参数MinGray和MaxGray确定了图像中应视为背景的区域的灰度值阈值。灰度值小于MinGray或大于MaxGray的图像的所有部分在提取最大值以及分配区域时都将被忽略。为了完全分割图像, 应选择MinGray = 0和MaxGray = 255。 必须遵守MinGray < MaxGray。
演示代码:
read_image (Image, 'ic') dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'white', WindowID) decompose3 (Image, Red, Green, Blue) dev_display (Red) dev_set_colored (6) histo_2dim (Red, Red, Blue, Histo2Dim) scale_image_max (Histo2Dim, Histo2DimByte) smooth_image (Histo2DimByte, Histo2DimGauss, 'deriche2', 0.25) pouring (Histo2DimGauss, Cluster, 'all', 1, 255) dev_set_part (0, 0, 511, 511) dev_set_draw ('fill') dev_set_colored (12) dev_display (Red) class_2dim_sup (Red, Blue, Cluster, RegionClass2Dim)
源图
Histo2Dim
Histo2DimGauss
pouring (Histo2DimGauss, Cluster, 'all', 1, 255)
class_2dim_sup (Red, Blue, Cluster, RegionClass2Dim)
这个例子有一对算子不好理解:histo_2dim和class_2dim_sup。
histo_2dim
—计算两通道灰度值图像的直方图
histo_2dim(Regions,ImageCol,ImageRow:Histo2Dim::)
运算符histo_2dim计算Region内两个图像的二维直方图。通道1(ImageCol)的灰度值解释为行索引,通道2(ImageRow)的灰度值解释为列索引。在输出图像Histo2Dim中的一个点P(g1,g2) 处的灰度值表示灰度值组合(g1,g2)的频率,其中g1表示线索引,g2表示列索引。
class_2dim_sup
class_2dim_sup(ImageCol, ImageRow, FeatureSpace : RegionClass2Dim : : )
class_2dim_sup使用二维特征空间将两通道图像中的点分类。对于每个点,使用两个灰度值(每个图像一个)。特征空间由输入区域表示。分类如下:
如果由各个灰度值确定的点(g_ {r},g_ {c})包含在区域FeatureSpace中,则接受来自图像输入区域的点。g_ {r}是图像ImageRow的灰度值,而g_ {c}是ImageCol的相应灰度值。
假设P是坐标P =(R,C)的点,g_ {r}是图像ImageRow中位置(R,C)的灰度值,g_ {c}是位置(R, C)在 ImageCol中。然后将点P聚合到输出区域中,如果
g_ {r}被解释为行坐标,而g_ {c}被解释为列坐标。
有关FeatureSpace的生成,请参见 histo_2dim。在调用class_2dim_sup之前,可以通过应用区域转换运算符(例如rank_region, dilation1,shape_trans, elliptic_axis等) 来修改特征空间。
参数ImageCol和ImageRow必须包含相等数量的相同大小的图像。图像点取自两个图像的域的交集
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

