本帖最后由 Ming170 于 2016-9-27 11:12 编辑
明老师找油-22-分水岭算法及在数字岩心切割中的应用
明治良 科吉思石油技术
何为分水岭算法(WatershedAlgorithm)?
所谓分水岭算法(Watershed Algorithm),顾名思义,就是根据分水岭的构成来考虑图像的分割。现实中我们可以或者说可以想象有山有湖的景象,那么那一定是水绕山,山围水的情形。每一片湖都可以看做一个集水盆(basin),而区分高山(plateaus)与水的界线,以及湖与湖之间的间隔就是我们可爱的分水岭(watershed)。为了得到一个相对集中的集水盆,就需要让水涨到接近周围的最高的山,再涨就要漏水到邻居了,而邻居,嘿嘿,水质不同诶,会混淆自我的。
通俗的说,分水岭算法就是先通过一个适当小的阈值作为起点,即集水盆的底;然后是向周围浸水,直到达到分水岭。当然如果我们要一直淹没到山顶,即是一直处理到图像灰阶最高片,那么,当中就会出现筑坝的情况,不同的集水盆在这里相遇了,我们要洁身自爱,到这里为止,因为都碰到边界了;那么即使在相遇时没有碰到最高灰阶的地方,也需要人工构筑分水岭,区分不同的区域,不再上山,构筑属于自己的分水岭。
分水岭算法最大的优势是具有很强的边缘检测能力,对微弱的边缘也有较好的效果。这与分水岭扩张的阈值的设置有关系,阈值可以决定集水盆扩张的范围。但自我构筑的能力却不受影响。如何充分发挥分水岭算法强的边缘检测能力,而又能得到相对集中的连通的集水盆?现实中很好办,我们在往凹地加水的时候,直到它涨到这一块紧凑的山岭边缘就不加了;但是如果有一条小山沟存在,那没办法,在初始阈值分割的时候,也就是山沟与集水盆有同样的极小值,而且它们之间是以这个高度一直连接的。那没关系,我们将它连通。在图像上呢?如何实现?
算法思想是这样的实现的:
接下来是考虑将已加的水进行记录,记录成连通的区域,也就是看看有多少个互不相关的集水盆,有五个,那么我们就涨出五个湖,而且尽可能的高,只要大家想到不溢出。
统计初始连通区域,即从逐一扫描输入的种子像素点,将所有的标记了的初始集水盆一一纳入各自的区域,这是整修图像的扫描,就得到了各个连通初始集水盆的记录,同时得到了初始的分水岭, 之后就可以开始“水漫梁山”了。这就是淹没过程。让水位慢慢上升,让它原本的湖慢慢扩张,尽量利用其应有的空间,而又不至于淹没到其它的邻居湖泊。如此往复循环,直到对应区域完成,扫描所有的区域的分水岭,这样各自同时在一个水位下扩张,保证了不出现跳跃的情况出现(就是一个水位一个区域全局扩张)。
最终,所有的区域在每个水位都扩张完毕,得到了分割图,我们的大湖泊形成了
很多朋友至此已经看得一头雾水了,我又不懂编程,怎样才能把这种算法在数字岩心分割中应用呢,有没有好的现成软件实现呀?
这个软件已经有了,它就是-- 数岩领域最前沿的软件PerGeos 在里面实现非常简单,而且还能实现难度更大的三维三相分水岭分割,说得好不如干得好,还是让数据说话吧。
下图是一个数字岩心照片,从图片上我们可以看到有三种岩性:左下角灰色,右上角黑色和中间白色,但边界不清楚,另外常规处理会在右边黑色和白色中间出现一条灰色的岩性,这显然是有问题的。
1、首先利用梯度属性进行截止,设定分割节点数量,提取不同灰度范围的边界,如图红色所示
2、在探测出了边界之后,就可以根据灰度值把岩石划分成三个部分: 1)低照度部分(下图深红色区域)
2)中等照度部分(下图绿色区域)
3)高照度部分(下图亮红色区域)
3、有了这些基础,我们就可以应用三维分水岭算法分割岩石,分割结果如下图所示,可以看到三种岩石的边界拾取的干干净净,当然你也可以调整参数,让岩性分割更符合你的认识。
当我们把参数调整好,就可以应用这套参数和流程应用到整个数据体上,得到三维岩性分割的数据体了。
怎么样, 神奇吗? 简单吗? 想试试吗?
那就直接回复微信和我们联系,申请软件试用吧
|