分水岭分割算法

本文介绍了分水岭分割算法在计算机视觉中的应用,通过颜色和灰度特征来区分图像区域。首先对图像进行灰度化和二值化,再进行形态学开运算和距离变换,最后通过连通区域分割得到结果。此外,还讨论了分水岭分割的合并策略,利用巴特查里亚距离衡量区域相似性,以减少过分割问题。
摘要由CSDN通过智能技术生成

分水岭分割算法

在计算机视觉中我们常常关注的目标特征是颜色和灰度,刻画图像中的两个区域视觉相似性有许多方法,如形状描绘子,颜色特征,距特征等。对于某种场景下的应用,具有独特的纹理对象可以使用一个很好的纹理特征符。针对颜色不同的区域中的单体对象相同的扩展,我们可以使用颜色特征来测量对象的不用部分的相似性。如果物体各个子区域存在单一的颜色分布,我们可以使用颜色特征来测量对象不同部分的相似性。如果物体各个子区域存在单一的颜色分布,我们可以使用颜色特征来测量物体的不同区域的相似性概率。
分水岭分割算法的实现途径有多种,本节是利用图像距离变换来实现的,具体思路为:首先,对源图像进行灰度化,并使用OTSU进行二值化操作;其次,对二值化图像进行形态学开操作,利用distanceTransform完成图像距离变换操作;最后,归一化距离变换的统计图像,并计算相应的连通区域分割块:
示例代码如下:

Mat watershedSegment(Mat & srcImage, int & noOfSegments)
{
    Mat grayMat;
    Mat otsuMat;
    cvtColor(srcImage, grayMat, CV_BGR2GRAY);
    imshow("grayMat", grayMat);
    // 阈值操作
    threshold(grayMat, otsuMat, 0, 255, 
        CV_THRESH_BINARY_INV + CV_THRESH_OTSU);//使用最大类间方差进行分割,能够很好的分割直方图波峰和波谷不明显的图像
    imshow("otsuMat", otsuMat);
    // 形态学开操作
    morphologyEx(otsuMat, otsuMat, MORPH_OPEN, 
        Mat::ones(9, 9, CV_8SC1), Point(4, 4), 2);//去除小的干扰像素
    imshow("Mor-openMat", otsuMat);
    // 距离变换
    Mat disTranMat(otsuMat.rows, otsuMat.cols, CV_32FC1);
    distanceTransform(otsuMat, disTranMat, CV_DIST_L2, 3);
    // 归一化
    normalize(disTranMat, disTranMat, 0.0, 1, NORM_MINMAX);
    imshow("DisTranMat", disTranMat);
    // 阈值化分割图像
    threshold(disTranMat, disTranMat, 0.1, 1, CV_THRESH_BINARY);
    //归一化统计图像到0-255
    normalize(disTranMat, disTranMat, 0.0, 255.0, NORM_MINMAX);
    disTranMat.convertTo(disTranMat, CV_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值