• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#处理医学影像(三):基于漫水边界自动选取病灶范围的实现思路 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

开发背景:

医生在实际使用PACS软件观察病灶时,经常会测量不规则病灶的周长和面积,使用画笔工具勾勒比较耗时且准度欠佳,

或者在标记人工智能训练样本时少则几百张,多则几千张,为极大减少耗时和极大提高工作效率,故开发此功能用来自动勾勒病灶范围并自动测量。

 

国际惯例,先看效果:

 

思路流程概览:

①以鼠标按下作为漫水算法中心点向外扩散填充

②裁剪最大外接矩形,缩小计算范围

③灰度转换

④Canny算子或Sobel算子提取轮廓

⑤背景降噪

⑥提取边界轮廓

⑦设置容差范围

⑧可变多边形坐标转化

⑨缩放、平移、旋转后的坐标映射

 

准备一张样本并以手臂骨头作为假设病灶:

 

 

①以鼠标按下作为漫水算法中心点向外扩散填充

通过给定指定的中心坐标,和指定染色的颜色值,向四周扩撒,遇到一样或近似值将其包含在范围内,网上源码很多,很容易实现。

 

 

②裁剪最大外接矩形,缩小计算范围

将漫水填充范围的最大外接矩形裁剪出来,提高后续计算效率。

 

 

③灰度转换

转换成灰度图,为后续计算做准备。

 

④Canny算子或Sobel算子进行边缘检测

Canny算子和Sobel算子区别:

Canny算子:

在计算前先将图像进行高斯滤波转换,得到一个相对模糊的图像,使得噪点在平滑过度时的影响降到最低:

 

根据算法原理得到如下结果:

 

Sobel算子:

根据算法原理得到如下结果:

 

其中直观区别是canny算子计算的结果清晰,但不连续,容易受噪点影响,而sobel算子线条相对柔和,连续性强。

 

⑤背景降噪

进行一次手动背景降噪,使得展现的无用边缘更少,结果更清晰:

 

⑥提取边界轮廓

经过上面的计算后会得到一个边界坐标集合记为List<Point> list;

这些点是不连续的,不首尾相连的,我们需要将非边缘坐标删除,并将边缘坐标按顺时针或逆时针排序;

 

 

此时虽然得到了边缘坐标,但他是非连续性的,当我们把这些点连起来的时候就会出现问题:

 

 

所以我们将这些边缘坐标按逆时针或顺时针排序:

 

⑦在界面上增加滑块控件并设置容差范围

当碰到边界不是很清晰的时候,我们需要调整容差范围,以影响漫水扩散时的范围准确性:

 

 

观察容差范围1020的区别:

 

 

⑧可变多边形坐标转化

根据本系列教程的测量工具开发,在此基础上我们将标识的范围转化为可变多边形:

微调结果并显示周长和面积:

 

⑨缩放、平移、旋转后的坐标映射

当图像发生放大、平移、旋转时,要注意边缘坐标的映射以保证结果正确:

 

配合色彩增强,食用效果更佳!

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#/VB.NET 将Html转为Excel发布时间:2022-07-10
下一篇:
C#工作总结(一):Fleck的WebSocket使用发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap