图像分割(Image Segmentation)

作者:王先荣
前言
    图像分割指的是将数字图像细分为多个图像子区域的过程,在OpenCv中实现了三种跟图像分割相关的算法,它们分别是:分水岭分割算法、金字塔分割算法以及均值漂移分割算法。它们的使用过程都很简单,下面的文章权且用于记录,并使该系列保持完整吧。
分水岭分割算法
    分水岭分割算法需要您或者先前算法提供标记,该标记用于指定哪些大致区域是目标,哪些大致区域是背景等等;分水岭分割算法的分割效果严重依赖于提供的标记。OpenCv中的函数cvWatershed实现了该算法,函数定义如下:

void cvWatershed(const CvArr * image, CvArr * markers)

其中:image为8为三通道的彩色图像;
      markers是单通道整型图像,它用不同的正整数来标记不同的区域,下面的代码演示了如果响应鼠标事件,并生成标记图像。

//当鼠标按下并在源图像上移动时,在源图像上绘制分割线条
private void pbSource_MouseMove(object sender, MouseEventArgs e)
{
//如果按下了左键
if (e.Button == MouseButtons.Left)
{
if (previousMouseLocation.X >= 0 && previousMouseLocation.Y >= 0)
{
Point p1 = new Point((int)(previousMouseLocation.X * xScale), (int)(previousMouseLocation.Y * yScale));
Point p2 = new Point((int)(e.Location.X * xScale), (int)(e.Location.Y * yScale));
LineSegment2D ls = new LineSegment2D(p1, p2);
int thickness = (int)(LineWidth * xScale);
imageSourceClone.Draw(ls, new Bgr(255d, 255d, 255d), thickness);
pbSource.Image = imageSourceClone.Bitmap;
imageMarkers.Draw(ls, new Gray(drawCount), thickness);
}
previousMouseLocation = e.Location;
}
}

//当松开鼠标左键时,将绘图的前一位置设置为(-1,-1)
private void pbSource_MouseUp(object sender, MouseEventArgs e)
{
previousMouseLocation = new Point(-1, -1);
drawCount++;
}

您可以用类似下面的方式来使用分水岭算法:

使用分水岭分割算法

金字塔分割算法
    金字塔分割算法由cvPrySegmentation所实现,该函数的使用很简单;需要注意的是图像的尺寸以及金字塔的层数,图像的宽度和高度必须能被2整除,能够被2整除的次数决定了金字塔的最大层数。下面的代码演示了如果校验金字塔层数:

校验金字塔分割的金字塔层数

使用金字塔分割的示例代码如下:

使用金字塔分割算法

均值漂移分割算法
    均值漂移分割算法由cvPryMeanShiftFiltering所实现,均值漂移分割的金字塔层数只能介于[1,7]之间,您可以用类似下面的代码来使用它:

使用均值漂移分割算法

函数cvPryMeanShiftFiltering在EmguCv中没有实现,我们可以用下面的方式来使用:

调用均值漂移分割

分割效果及性能对比
    上述三种分割算法的效果如何呢?下面我们以它们的默认参数,对一幅2272x1704大小的图像进行分割。得到的结果如下所示:

图1 分水岭分割算法(左图白色的线条用于标记区域)

图2 金字塔分割算法

图3 均值漂移分割算法
    从上面我们可以看出:
    (1)分水岭分割算法的分割效果效果最好,均值漂移分割算法次之,而金字塔分割算法的效果最差;
    (2)均值漂移分割算法效率最高,分水岭分割算法接近于均值漂移算法,金字塔分割算法需要很长的时间。
    值得注意的是分水岭算法对标记很敏感,需要仔细而认真的绘制。

本文的完整代码如下:

本文完整代码

感谢您耐心看完本文,希望对您有所帮助。

图像分割(Image Segmentation)相关推荐

  1. CV之IS:计算机视觉之图像分割(Image Segmentation)算法的挑战任务、算法演化、目标检测和图像分割(语义分割/实例分割/全景分割)的对比

    CV之IS:计算机视觉之图像分割(Image Segmentation)算法的挑战任务.算法演化.目标检测和图像分割(语义分割/实例分割/全景分割)的对比 相关文章 CV之IS:计算机视觉之图像分割( ...

  2. CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介、使用方法、案例应用之详细攻略

    CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介.使用方法.案例应用之详细攻略 目录 图像分割算法的简介 1.常用的数据集 2.图像分割的评价指标

  3. Python+OpenCV:基于分水岭算法的图像分割(Image Segmentation with Watershed Algorithm)

    Python+OpenCV:基于分水岭算法的图像分割(Image Segmentation with Watershed Algorithm) ############################ ...

  4. 计算机视觉:图像检测和图像分割有什么区别?

    人工智能中的图像处理 人工智能对于图像处理有不同的任务.在本文中,我将介绍目标检测和图像分割之间的区别. 在这两个任务中,我们都希望找到图像中某些感兴趣的项目的位置.例如,我们可以有一组安全摄像头照片 ...

  5. 深度对抗学习在图像分割和超分辨率中的应用

    原文:http://blog.csdn.net/shenziheng1/article/details/72821001 深度对抗学习在图像分割和超分辨率中的应用 原创 2017年05月31日 16: ...

  6. DL之Panoptic Segmentation:Panoptic Segmentation(全景分割)的简介(论文介绍)、全景分割挑战简介、案例应用等配图集合之详细攻略

    DL之Panoptic Segmentation:Panoptic Segmentation(全景分割)的简介(论文介绍).全景分割挑战简介.案例应用等配图集合之详细攻略 目录 Panoptic Se ...

  7. CV之IS:计算机视觉中图像分割(语义分割)最diao炸(完)天(整)的思维导图

    CV之IS:计算机视觉中图像分割(语义分割)最diao炸(完)天(整)的思维导图 导读:此语义导图为某大牛精心整理,感谢无私分享. 目录 语义分割思维导图(完整) 相关文章 CV之IS:计算机视觉之图 ...

  8. 根据大小分割大文本_基于深度学习的图像分割在高德地图的实践

    一.前言 图像分割(Image Segmentation)是计算机视觉领域中的一项重要基础技术,是图像理解中的重要一环.图像分割是将数字图像细分为多个图像子区域的过程,通过简化或改变图像的表示形式,让 ...

  9. 生成对抗网络与图像分割

    深度学习已经在图像分类.检测.分割.高分辨率图像生成等诸多领域取得了突破性的成绩.但是它也存在一些问题. 首先,它与传统的机器学习方法一样,通常假设训练数据与测试数据服从同样的分布,或者是在训练数据上 ...

最新文章

  1. 数据库高性能读写分离集群操作说明
  2. Sqlite的多表连接更新
  3. android与python交互_Android与Python混合编程
  4. cwntos新建目录挂载磁盘_Ubuntu系统下不同硬盘分区与挂载
  5. 使用PaddleFluid和TensorFlow训练序列标注模型
  6. 异步编程Promise、Generator和Async
  7. 【Flink】 Flink 应用资源分配问题排查思路
  8. Codeforces Round #628 (Div. 2)C - Ehab and Path-etic MEXs
  9. mysql最大字段数_mysql最大字段数量及 varchar类型总结
  10. mysql自增序列nextval并发_[DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题...
  11. rpm 安装 mysql5.6.28_Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程
  12. 多线程java_敞开心扉,一起聊聊Java多线程
  13. 排序(二分插入排序)
  14. 金格公司对致远HandWrite产品的测试地址
  15. 流量造假:“蔡徐坤微博转发过亿”幕后推手星援 App 开发者一审获刑五年
  16. 一二线城市都有哪些互联网公司是大家都想去的?
  17. MFC ScreenToClient坐标转换错误
  18. Windows系统设置局域网共享 解决:登录失败,用户账号限制。可能的原因包括不允许空密码,登录时间限制,或强制的策略限制
  19. excel导出java不完整_有关Java POI导出excel表格中,单元格合并之后显示不全的解决方法。...
  20. dlib android版本号,dlib-android

热门文章

  1. OpenCV中cvADDS()为啥第二个参数要是CvScalar类型?掩码mask=NULL又是何意?
  2. AMD芯片支持oracle数据库,oracle 11gR2 amdu 工具可以直接使用
  3. java封装省市区三级json格式,2016中国省市区三级联动json格式.pdf
  4. php 输出rtf,有没有办法在PHP中访问压缩RTF和输出RTF代码
  5. leetcode算法题--Unique Paths II
  6. OVS DPDK--虚拟设备配置(六)
  7. python turtle什么意思_Python turtle shape和
  8. 大数据量表中,增加一个NOT NULL的新列
  9. js网页如何获取手机屏幕宽度
  10. Ubuntu批量修改文件名后缀