这个程序是研一下学期的计算机视觉课程大作业,完成于 2013/06/16,是对 Soille 和 Vincent(1991)提出的模拟浸没的分水岭算法的实现,详见下面的报告。

源码托管在 Github 上:点击进入链接

可执行程序及测试图片:点击进入链接

一、算法概述:

分水岭算法是一种图像分割算法,本报告是对Soille和Vincent(1991)提出的模拟浸没的分水岭算法的实现,算法包括2个部分:第一个部分是排序;第二部分为泛洪。算法描述如下:

(1)将原图像转为二值图,对各像素点的灰度值进行从小到大排序,相同的灰度值为同一个层级。

(2)处理第一个层级所有的像素点,如果其邻域已经被标识属于某一个区域,则将这个像素加入一个先进先出的队列。

(3)先进先出队列非空时,弹出第一个元素。扫描该像素的邻域像素,如果其邻域像素的灰度属于同一层(灰度值相等),则根据邻域像素的标识来刷新该像素的标识。一直循环到队列为空。

(4)再次扫描当前灰度值层级的像素,如果还有像素未被标识,说明它是一个新的极小区域,则当前区域的值(当前区域的值从0开始计数)加1后赋值给该为标识的像素。然后从该像素出发继续执行步骤(3)的泛洪直至没有新的极小区域。

(5)返回步骤(2),处理下一个灰度值层级的像素,直至所有层级的像素都被处理。

二、算法实现(C++opencvVS2010):

1、主要类说明(具体说明见附录源码中的注释):

(1)WatershedPixel类:根据灰度值对图像像素进行排序。

(2)WatershedStructure类:用于存储像素点WatershedPixel,并生成各像素点的邻域像素。

(3)WaterShedAlgorithm类:分水岭核心算法,包括图像预处理,泛洪和分水线绘制。

2、使用说明:

在命令提示符(cmd)中进入ws.exe(分水岭算法的可执行文件)和图片所在文件夹,

输入:ws image_name

输出:

image_name_BW.jpg ——原图像对应的二值图

image_name_Gray.jpg ——原图像对应的灰度图

image_name_Gray_WS.jpg ——在灰度图中绘制的分水线

image_name_WS.jpg ——在黑色背景中绘制的分水线

3、其他说明:

本算法实现借助开源的opencv库对图像进行读取、输出和预处理(格式转换等),ws.exe运行时需要opencv相关的动态链接库(附件中的dll文件)。

三、算法测试:

1、灰度图:

2、彩色图:

四、结果分析:

(1)该算法实现相对简单,速度快,分割效果不错。

(2)但是在噪声影响下会出现过分割,可在执行算法之前进行预处理,比如平滑降噪,以及利用梯度。

(3)对细节太多的彩色图片存在过分割。

最新文章

  1. window下,加载redis拓展
  2. 【转】APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了
  3. POJ 3274 Gold Balanced Lineup 哈希,查重 难度:3
  4. WPF动画之路径动画(3)
  5. Hibernate(二)Hibernate 实例
  6. iOSSingleton设计模式详细的说明教程
  7. HTML5 进阶系列:canvas 动态图表
  8. http post,get,put,delete区别(收集整理)
  9. shell编程/字库裁剪(2)——编程过程
  10. 德邦总管 修改oracle数据库用户密码的方法
  11. javascript学习笔记_1
  12. volatile和不加volatile的区别
  13. zabbix分布式监控部署--技术流ken
  14. Deep Knowledge Tracing (深度知识追踪)
  15. MySql 5.7.20版本免安装版配置过程
  16. js学习(4) 函数
  17. 全景3d
  18. webpack打包优化并开启gzip
  19. IE11 F12工具报错
  20. debian下创建新用户useradd

热门文章

  1. fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
  2. 【转】 通过VMLibrary在client partition上安装AIX全程实录
  3. Oracle 提供的start with 关键字用法
  4. JQuery UI 入门
  5. GPS坐标(WGS84)转换百度坐标(BD09) python测试
  6. Django Rest Framework(一)
  7. VMware虚拟机NAT模式的具体配置
  8. selection createTextRange setSelectionRange
  9. JAVA 判断对象内容是否含有空值
  10. nodejs安装,配置环境,使用express建立一个新项目