Level计算在图像分割技术的应用

levelset是经典的图像处理方法, leveltrace是什么较少有人知道。其实他是医学图像分割领域的一个技术。来源于VTK,ITK的库文件。单独实现这些方法可以帮助理解ITK,VTK的内容。

先简要介绍,

通常leveltrace可以理解是找一个特定器官组织物体的轮廓,将其封闭的等高线求出来。其轮廓的值比如是灰度200,在2D医学图像中,这样的等高线有几个难点:1. 在哪里开始选封闭线的起点,2. 等高线有,但未必是封闭的一个多边形,因为医学图像一个器官内部有灰度变化,导致轮廓线有些地方断了,有些地方与背景的灰度一样混在一起不好区分。断的位置要连起来,手动操作繁琐。

leveltrace在技术上采用一些算法完成封闭的轮廓线的形成,不是简单用一个 level set 或等高值。

具体在3D slicer 中实现的方式: 点击鼠标,算一个起点,然后,在起点开始找其他的等值点,再延申出去找其他等值点,直到回到起点。分别在2D和3D处理,2D得到平面轮廓,就是多边形,3D得到的是3D表面,就是多个医学断层的多边形堆叠成。

先说为什么要2D的破解。

leveltrace这个已经有开源的库实现,VTK加ITK的,可以鼠标交互操作,先放鼠标到一位置,预先给出黄色的轮廓,不移动鼠标,点击一次后,轮廓变个绿色确认形状,并填充轮廓内部,获得VTK图像物体,可以存下或三维显示拉动放大等,当然这是在VTK窗口中的计算机图形学实现。只在任意位置移动鼠标,得到不同轮廓,对应的不同的level值,因为找到物体在变动,显示出来提示用户,确认后停下鼠标,点击。其方面的关键是不用手动画轮廓线,也不用费力眼睛去辨别灰度就得到轮廓线。但基于VTK和ITK,Slicer3D软件中鼠标交互地实现了它,不过绕个圈子,先用python代码调VTK,后调C++的ITK函数计算level。不方便的是没有一个简单的函数调用去直接实现。

为了快捷简单移植, 将其原始的代码理解难度降低。将代码C++化成为单独的函数或 C++类。

目前,经过python等源码修改后,功能由若干个函数承担,方便移植,分别计算轮廓,再保存结果为2D图像。

左图是已经有2个level trace的计算,现在是第3个,即第3次点击鼠标前放的位置。

右图是点击后出现的在这个起点下的一个traced level。黄色是多边形,红色是填充的区域。

安装power 的jihuo

jihuo:

http://www.yishimei.cn/?=qkd9w 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值