医疗影像中DR的骨抑制

1 背景

在DR的拍摄中,根据肺部和脊肋骨两种组织,在不同能量X射线的照射下,衰减的系数不同的特点,可以通过两次不同剂量的曝光后,通过算法,得到一张骨骼的图像和一张肺部图像。

通过一些机构的统计,双能剪影的后的肺部影像对结节,特别是小结节的检出率有不同程度的提高。统计表明,对3mm一下的结节的检出率,在双能剪影的肺部检出率有47%,而一张普通的胸片的检出率仅仅为22%。但是,双能剪影也有明显的缺点,第一是患者受到两次X光照剂量;第二,双能剪影在拍摄的时候,一般需要病人憋气更长时间,导致拍片失败。

这个时候,骨抑制算法,就是替代两次曝光的一个很好的方案;另外,在现在DR行业如此内卷的时期,骨抑制算法也能算作智能DR设备的亮点功能之一。

2. AI骨抑制算法(Bone Suppress)

整个算法大概分为以下3个步骤,可以给大家一点参考

2.1 对图像中的肺部区域进行裁剪

对DICOM的胸片图像,使用Unet网络,来分割肺部区域蒙板。对分割后的肺部蒙板中,区域较小的区域进行去除。得到如下的图像

2.2 对图像的肋骨进行Unet分割

注意这里分割出脊肋的mask,不是阈值后,然后再将mask二值化的图像,而是阈值后,保留mask的0到1的值,做为第三步中的其中一路初始输入图像,如下图所示:

2.3 将2步中标记的mask作为噪声在原图上进行抑制

将原始图像和第二步中的输出,两个通道,作为输入,目标图作为输出;将脊肋骨视为图像中的噪声信息,使用图像去噪的方法来完成肋骨抑制的任务,采用深度卷积网络作为基础模型,分析并尝试多种策略来提升模型性能,最终,使用Unet网络结构,并且,通过跳跃连接以及残差策略增强网络细节表现能力。 为了在计算中减少对图像的细节纹理的损失,模型采用在原图大小直接计算, 但是,考虑到显存压力,使用1024*1024滑动窗口计算,并采用Overlap-tile策略减少计算边缘信息损失。 这些策略有效的保证了输出结果的准确性,精确性。 模型可以在保留肺部纹理细节清晰同时也能有效的抑制骨影。最终得到的结果如下

3 最后算法可以通过onnx进行工程化,供DR Console工作站调用

为了能提供给设备采集软件进行调用,需要将算法修改为动态库的形式,另外,也可以提高效率。以下是头文件定义,可以输入和输出的接口是很容易集成的。

#ifndef _BONE_SUPRESS_API
#define _BONE_SUPRESS_API
#ifndef DLLAPI_FILTER
#define BONE_SUPRESS_DLLAPI extern "C" __declspec(dllimport)
#endif
enum BoneSupressResult
{
    BoneSupressResultOK = 0,
    BoneSupressResultImgErr,
    BoneSupressResultIniErr, 
};
BONE_SUPRESS_DLLAPI bool IntializeInstance(bool beGpu);
BONE_SUPRESS_DLLAPI BoneSupressResult  ChestBoneSupress(unsigned short* imageData, int imgW, int imgH,
    unsigned short* resultData, int resultDataLen);
BONE_SUPRESS_DLLAPI bool ReleaseInstance();

#endif

最后运算一张4000 * 4000 ,2个字节的输入图像后,在1050Ti的显卡上,计算共需13s的时间,3060Ti上,计算花费8s中,实际应用中,可以满足设备的需求。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值