码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C#处理医学影像(三):基于漫水边界自动选取病灶范围的实现思路


    开发背景:

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

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

     

    国际惯例,先看效果:

     

    思路流程概览:

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

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

    ③灰度转换

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

    ⑤背景降噪

    ⑥提取边界轮廓

    ⑦设置容差范围

    ⑧可变多边形坐标转化

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

     

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

     

     

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

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

     

     

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

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

     

     

    ③灰度转换

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

     

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

    Canny算子和Sobel算子区别:

    Canny算子:

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

     

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

     

    Sobel算子:

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

     

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

     

    ⑤背景降噪

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

     

    ⑥提取边界轮廓

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

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

     

     

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

     

     

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

     

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

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

     

     

    观察容差范围10和20的区别:

     

     

    ⑧可变多边形坐标转化

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

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

     

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

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

     

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

     

     

    C#开发PACS、RIS、3D医学影像处理系统系列教程 目录整理:

    菜鸟入门篇

    PACS客户端:

    C#开发PACS医学影像处理系统(一):开发背景和功能预览

    C#开发PACS医学影像处理系统(二):界面布局之菜单栏

    C#开发PACS医学影像处理系统(三):界面布局之工具栏

    C#开发PACS医学影像处理系统(四):界面布局之状态栏

    C#开发PACS医学影像处理系统(五):查询病人信息列表

    C#开发PACS医学影像处理系统(六):加载Dicom影像

    C#开发PACS医学影像处理系统(七):读取影像Dicom信息

    C#开发PACS医学影像处理系统(八):单元格变换

    C#开发PACS医学影像处理系统(九):序列控件与拖拽

    C#开发PACS医学影像处理系统(十):Dicom影像下载策略与算法

    C#开发PACS医学影像处理系统(十一):Dicom影像挂片协议

    C#开发PACS医学影像处理系统(十二):绘图处理之图形标记

    C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量

    C#开发PACS医学影像处理系统(十四):处理Dicom影像窗宽窗位

    C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法

    C#开发PACS医学影像处理系统(十六):2D处理之影像平移和缩放

    C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转

    C#开发PACS医学影像处理系统(十八):Dicom使用LUT色彩增强和反色

    C#开发PACS医学影像处理系统(十九):Dicom影像放大镜

     

    PACS三维处理医学图像:

    C#开发PACS医学影像三维重建(一):使用VTK重建3D影像

    C#开发PACS医学影像三维重建(二):使用VTK进行体绘制

    C#开发PACS医学影像三维重建(三):纹理映射与颜色传输

    C#开发PACS医学影像三维重建(四):3D网格平滑效果

    C#开发PACS医学影像三维重建(五):基于梯度透明的组织漫游

    C#开发PACS医学影像三维重建(六):三维光源与阴影效果

    C#开发PACS医学影像三维重建(七):空间测量与标注

    C#开发PACS医学影像三维重建(八):VR体绘制

    C#开发PACS医学影像三维重建(九):MPR三视图切面重建

    C#开发PACS医学影像三维重建(十):MIP最小密度投影

    C#开发PACS医学影像三维重建(十一):CPR曲面重建

    C#开发PACS医学影像三维重建(十二):VE虚拟内镜技术

    C#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思路

    熟手进阶篇

    医学影像算法:

    C#处理医学影像(一):基于Hessian矩阵的血管肺纹理骨骼增强对比

    C#处理医学影像(二):基于Hessian矩阵的医学影像增强与窗宽窗位

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

    C#处理医学影像(四):影像锐化增强对比

     

    PACS网页端 开发Web版本的PACS:

    C#开发Web端PACS(一):基于PACS客户端思想重写Web端

    C#开发Web端PACS(二):使用 .Net MVC 开发手机端PACS服务端

    C#开发Web端PACS(三):使用HTML5和CSS3开发PACS手机端页面

    C#开发Web端PACS(四):Web端与服务端的DICOM传输

    C#开发Web端PACS(五):Web端的平移缩放旋转2D操作

    C#开发Web端PACS(六):Web端的窗宽窗位调整

    C#开发Web端PACS(七):将移动端接入微信公众号实现医院云胶片

    登峰造极篇

    C#开发基于Python人工智能的肺结节自动检测

    C#开发基于Python人工智能的脊柱侧弯曲率算法

    C#开发基于Python机器学习的医学影像骨骼仿真动画

    C#开发基于Python机器学习的术后恢复模拟

    C#开发基于U3D的VR眼镜设备虚拟人体三维重建

    C#开发基于全息投影的裸眼3D医学影像显示技术

    周边附加篇

    胶片打印:

    C#开发医学影像胶片打印系统(一):万能花式布局的实现思路

    C#开发医学影像胶片打印系统(二):胶片打印机通讯

    C#开发医学影像胶片打印系统(三):Pacs二维功能在排版中的应用

     

    PACS服务端:

    C#开发PACS医学影像处理系统服务端(一):医疗设备的连接与收图

    C#开发PACS医学影像处理系统服务端(二):高并发架构

     

    PACS与RIS系统的通信与集成

    在RIS系统中调起PACS并打开Dicom影像

     

    云PACS与远程会诊

    C#开发PACS医学影像处理系统之云PACS(区域PACS)(一):架构概述

    C#开发PACS医学影像处理系统之云PACS(区域PACS)(二):远程会诊与双向转诊

     

    科幻级视频特效:

    使用Adobe After Effects 制作PACS影像处理系统宣传视频

  • 相关阅读:
    ubuntu安装ffmpeg
    git 常用命令
    python中not的用法
    ChatGPT 火爆全球,我们能抓住的下一个风口在哪?
    通过leangoo建立你的清单管理系统
    node 第十八天 中间件express-session实现会话密钥
    【图像生成Metrics】快速计算FID、KID、IS、PPL
    迅为恩智浦iTOP-IMX6开发平台
    docker — 容器存储
    [LeetCode 1774]最接近目标价格的甜点成本
  • 原文地址:https://www.cnblogs.com/Uncle-Joker/p/16021914.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号