勇哥的实验:halcon阈值分割算子细谈(八)拓扑分割算子 pouring(浇水)和class_2dim_sup二维像素分类分割

阈值分割引言

C#
阈值分割有非常多的算法,大体上分为全局和局部算法。
全局算法包括全局固定阈值和基于图像直方图的阈值,局部算法包括局部动态阈值分割。
基于图像直方图阈值分割的方法也有很多,比如常规的高斯滤波双峰法,OTSU大津法。
但是这类所有的法都基于一个假设:图像是有前景和背景的,待分割目标处于背景中,即图像直方图是双峰的。
如果因为非均匀光照导致待分割目标不处于背景或前景中,即图像直方图无双峰,
那么基于图像直方图的所有法都是不甚理想的
只能在此基础上进行一定的变换,例如nbl算法等,这些都属于局部算法。

任何算法,都会基于假设空间的。没有假设空间,所有算法性能一致。包括经典算法和深度学习算法。

本系列的贴子勇哥通过实验来细品它们之间的差别,以求以后可以精准应用。


这一节要谈的拓扑分割算子是pouring:

pouring(Image : Regions : ModeMinGrayMaxGray : )

倒入会将输入图像视为“山脉”。较大的灰度值对应于山峰,而较小的灰度值对应于谷底。 
pouring分几步对输入图像进行分割。
首先,提取局部最大值,即,单独像素或以扩展平台的形式具有比其直接邻居更大的灰度值(在4个邻居中)。
在下一步中,由此找到的最大值是扩展的起点,直到达到“谷底”。
只要存在灰度值变小的像素链,就可以进行扩展(就像水从各个方向的最大值向下流一样)。
同样,使用4邻域,但条件较弱(较小或相等)。
这意味着谷底的点可能属于一个以上的最大值。
首先,这些区域没有分配给一个区域,而是在最后一步中将其划分为所有竞争段。
通过均匀扩展所有相关段来进行拆分,直到分配了所有模糊像素为止。
参数 
Mode确定执行哪些步骤。可能有以下值:


  • 'all'

  • 这是正常的操作模式。执行分割的所有步骤。将区域分配给最大值,并分割重叠区域。


  • 'maxima'

  • 分割仅提取输入图像的局部最大值。没有提取相应的区域。


  • regions

  • 分割提取唯一确定的输入图像的局部最大值和相应区域。分配给一个以上最大值的区域不会拆分。

为了防止算法分割不同于图像其余部分的均匀背景,参数MinGrayMaxGray确定了图像中应视为背景的区域的灰度值阈值。灰度值小于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)


源图

image.png

Histo2Dim

image.png

Histo2DimGauss

image.png

pouring (Histo2DimGauss, Cluster, 'all', 1, 255)

image.png

class_2dim_sup (Red, Blue, Cluster, RegionClass2Dim)

image.png


这个例子有一对算子不好理解:histo_2dim和class_2dim_sup。


histo_2dim 

—计算两通道灰度值图像的直方图

histo_2dimRegionsImageColImageRowHisto2Dim:)

运算符histo_2dim计算Region内两个图像的二维直方图。通道1(ImageCol)的灰度值解释为行索引,通道2(ImageRow)的灰度值解释为列索引。在输出图像Histo2Dim中的一个点P(g1,g2) 处的灰度值表示灰度值组合(g1,g2)的频率,其中g1表示线索引,g2表示列索引。


class_2dim_sup

class_2dim_sup(ImageColImageRowFeatureSpace : 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, dilation1shape_trans, elliptic_axis等) 来修改特征空间。

参数ImageColImageRow必须包含相等数量的相同大小的图像。图像点取自两个图像的域的交集





--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864