上海交通大学

医学图像处理

数学形态学一个应用是分水岭算法,为了便于理解,可以将图像的灰度空间与地球表面的地形高度相类比,据此,发明了应用于图像领域的分水岭算法。

测地线距离

假设,如下图所示的一个岛屿,要从

点走到

点,虚线所表示的是最短的直线距离,也就是欧式距离,考虑到现实情况,不能穿过水面到达目标地点,所以,能够从起点到终点的实际通行路线中最短的距离成为测地线距离。

通过以上分析,给出测地线距离的定义:

给定指定连通域

,测地线距离就是

中两个像素点

之间的最短(可执行)路径的长度,用公式定义如下:

测地线影响域(Geodesic Influence Zone,IZ)

如下图所示,假定一个连通域

包含了若干个子区域

,用公式表示

所表示的测地线影响域为:

以上公式可以理解为,区域

中的像素点到

域的测地线距离比其他域更小的点的轨迹的集合,也就是以

域中的种子点出发,其测地线距离比其他域的种子点都要小的点集所构成的区域。如下图所示:

测地线影响域的skeleton(SKIZ)

SKIZ表示区域

中的点不属于任何一个测地线影响域,也就是域

中的点到两个测地线影响域的中测地线距离相等。区域

中构成

的SKIZ,记作

,用公式的表述如下:

注意:,

表示区域

以外的

中的所有点的集合集合

分水岭算法

如下图所示的山脉地形图,包含山谷和山峰,在水平面不断上升的过程中,会逐渐淹没掉一些较低的区域,而为了防止水溢出,需要不断在山脊上修建大坝,这个过程不断进行,最后会得到一个区域分割的效果。

在一副图像上实现分水岭算法,与上述过程相似,只不过是通过灰度值充当水平面的角色,对图像进行不断的填埋,最后得到区域分割的效果图。

如上图所示的动画中,不断用灰度值代表的水平面淹没图像中的最小值,最后得到分割后的图像。综上,分水岭算法的步骤可以总结如下:

按照图像灰度值对图像中的所有像素进行排序;

将最小的灰度值作为起始点,该灰度值也是初始阈值;

通过每次迭代加1的方式增加阈值,如果找到另外一个局部最小点,将其添加到最小点列表,然后计算和其他已存在的最小点的SKIZ,否则,计算该点和已经存在的最小点列表计算SKIZ

步骤3的过程可以理解为:以起始点为中心进行区域增长,区域增长的过程会不断接触新的邻域,而通过计算SKIZ距离的方式分配(区域增长所接触到的)邻域内的像素点,分配邻域内像素点的类别。

重复步骤3,直到所有的像素点都被分类到“盆地”(区域),或者阈值超过了最大的灰度。

如下图所示,另外一种分水岭算法的原理是,指定初始的种子点,只对种子点所在的邻域像素进行分类,而不考虑其他区域。

分水岭算法的应用实例

如下图所示的图片,以最小点开始,进行分水岭算法,会将整幅图分割成许多小区域,造成过分割的效果。为了解决这一问题,有以下三种解决方案:

通过一些平滑运算(如高斯平滑)抹掉原图中的一些较小的像素点;

增加分水岭算法的初始阈值,通过分水岭算法直接抹掉一些较小的像素点;

通过其他算法,把已经混合在一起的一些小区域进行组合,之后在通过分水岭算法分割。

最后,通过合并一些小区域再利用分水岭算法进行分割的效果如下图所示:

如下图所示,展示了通过分水岭算法分割血细胞的流程:

分水岭算法 c语言实现,分水岭算法的应用相关推荐

  1. 分水岭算法 c语言实现,分水岭算法MATLAB编程代码解析

    close all; %% %Step 1: 彩***像->灰度图像 rgb = imread('pears.png'); I = rgb2gray(rgb); figure;subplot(1 ...

  2. c语言考试算法,c语言考试常用算法docx.docx

    c语言考试常用算法docx 求1~100的累加和#includevoid main(){inti=1,sum=0;while (i<=100){sum+=i;i++;}printf(" ...

  3. c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言

    FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...

  4. 函数c语言桶排算法,C语言基本排序算法之桶式排序实例

    本文实例讲述了C语言基本排序算法之桶式排序.分享给大家供大家参考,具体如下: 桶式排序是对一个有n个整型元素的数组a[n],其中对任意i,0 <= a[i] <= m的特殊排序算法. 可以 ...

  5. 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)

    Clock页面置换算法: 6)动态给出页面调用序列并进行调度: 7)输出置换结. C++编程要? 考试用 哪位大侠 帮帮 快点 谢谢了 这很简单啊,要打字太多了.不过网上这类算法举例很少,就看你怎么理 ...

  6. c语言编程实现dsa算法,C语言实现DSA算法(不包括质数生成)

    1.头文件部分 #include #include #include 2.判断大数是不是0或1 参见<C语言实现RSA算法> 3.大数加减乘除幂模 参见<C语言实现RSA算法> ...

  7. 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

  8. 用c语言编写银行家算法,C语言实现银行家算法

    <C语言实现银行家算法>由会员分享,可在线阅读,更多相关<C语言实现银行家算法(8页珍藏版)>请在人人文库网上搜索. 1.C语言实现银行家算法(源码.运行结果)一. 源码/* ...

  9. 最佳值换算法c语言,页面置换算法---最佳置换算法(OPT)

    最佳置换算法(OPT) 什么是OPT 最佳置换算法,其所选择的被淘汰的页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面.采用最佳置换算法通常可保证最低的缺页率.但是人们目前还无法与之, ...

  10. shuffle算法c语言,C#Shuffle算法(洗牌算法、抽样算法)

    Fisher-Yates Shuffle算法 1.创建一个新的list 2.随机取出当前0-list.Count其中一个数 3.把老list当前随机数位置添加到新list 4.老list删除这个数 5 ...

最新文章

  1. 保洁阿姨看完都会了!java导出excel并下载详解
  2. 【牛客网多校】19-7-25-H题 Magic Line
  3. 不贵难得之货,使民不盗
  4. Altera FPGA程序固化
  5. php基本语法的几点备忘
  6. springboot maven父项目脚手架
  7. JDBC——Java连接关系型数据库
  8. 绕过tp路由器管理密码_普联(TPLink)路由器管理员密码是什么?
  9. mac双系统w ndows8,U盘如何安装MAC双系统
  10. 【转帖】mysql锁机制
  11. 如何免费使用jrebel 和eclipse 项目配合完成热部署功能
  12. 【转】qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式
  13. 人生一定要知道的十大“博弈”!
  14. AD域控的搭建与加入AD域
  15. std::partial_sort 用法
  16. android webview 拦截响应,android WebView拦截请求详解
  17. opengl光照效果的三棱锥+键盘上下左右控制旋转(学习笔记-仅供参考)
  18. 同元车辆模型库——TA系列
  19. 服务器CPU跑满了怎么办
  20. 【Stephen Boyd】【1994】系统与控制理论中的线性矩阵不等式

热门文章

  1. 小程序获取用户openid,php获取微信小程序openid的方法
  2. Qt实现Windows风格无边框
  3. 关于最近网上谣言传的很凶的 “太吾绘卷” 游戏源代码的问题。
  4. 利用Dockerfile制作自己的Docker镜像
  5. vue集成阿里云Aliplayer直播点播组件
  6. 基于docker一行命令搭建个人博客wordPress
  7. 曾国藩家书-修身篇 致诸弟·明师益友虚心请教
  8. 《吃透MQ系列,图灵学院和咕泡学院
  9. Unity3d打地鼠
  10. 双u服务器装win7系统安装,u深度一键u盘装原版win7 安装系统详细使用教程