阈值分割引言
C#
阈值分割有非常多的算法,大体上分为全局和局部算法。 全局算法包括全局固定阈值和基于图像直方图的阈值,局部算法包括局部动态阈值分割。 基于图像直方图阈值分割的方法也有很多,比如常规的高斯滤波双峰法,OTSU大津法。 但是这类所有的法都基于一个假设:图像是有前景和背景的,待分割目标处于背景中,即图像直方图是双峰的。 如果因为非均匀光照导致待分割目标不处于背景或前景中,即图像直方图无双峰, 那么基于图像直方图的所有法都是不甚理想的 只能在此基础上进行一定的变换,例如nbl算法等,这些都属于局部算法。 任何算法,都会基于假设空间的。没有假设空间,所有算法性能一致。包括经典算法和深度学习算法。 本系列的贴子勇哥通过实验来细品它们之间的差别,以求以后可以精准应用。
这个例子是基于算子class_2dim_unsup做图片分割。
原型如下:
class_2dim_unsup(Image1, Image2 : Classes : Threshold, NumClasses : )
前两个参数是输入图像;第三个参数是输出的类别;
第四个参数是到聚类中心的最大允许距离;第五个参数是分成多少个类别。
class_2dim_unsup使用两个单通道图像执行分类。 首先,计算两个图像的二维直方图( histo_2dim)。 在此直方图中,提取出第一个最大值;它是第一个集群中心。 使用两个图像的域的交集计算直方图(请参见reduce_domain)。 此后,图像中所有阈值最大的像素 确定最大范数中距聚类中心的像素。 这些像素形成一个输出区域。接下来,将如此分类的像素从直方图中删除,以便在下一类中不考虑它们。 在此修改后的直方图中,再次提取最大值;它再次充当集群中心。 以上步骤重复NumClasses次;因此,将得出NumClasses输出区域。 仅返回两个图像中定义的像素。
演示代码:
read_image (Image, 'patras') 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_draw ('fill') dev_set_colored (6) dev_display (Red) *square表示正方形掩膜;5表示正方形边长;mirrored表示镜像,也就是边界区域, *掩膜会超出图像区域的像素值使用镜像给与补充。 median_image (Red, RedMedian, 'square', 5, 'mirrored') median_image (Blue, BlueMedian, 'square', 5, 'mirrored') *第四个参数是到聚类中心的最大允许距离;第五个参数是分成多少个类别。 class_2dim_unsup (RedMedian, BlueMedian, Classes, 30, 3)
目前这个分割方式还没找到适合的应用。如果有好例子勇哥会在这里跟贴介绍。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


