CT影像数据(nrrd文件和dicm文件)的读取和预处理

说点题外话:最近参加了一个学院老师的创新项目(其实早就参加了,咸鱼划水到了现在才动 ),内容是使用机器学习算法对肾癌CT影像数据进行预测,所以就有了第一步–数据预处理(给自己挖了一个大大的坑 ),就一个数据预处理代码我写了一个多星期,我也是服了我自己了。数据保密,大家就不要想找我要数据了,我是不会给的,这个博客只是用来记录一下我的惨淡经历。

数据处理过程中遇到的坑:

1、由于自己第一次接触医学,第一次用代码实现CT数据预处理,所以都是从网上现学现用,从如何读入 n r r d nrrd nrrd文件到学长教我如何实现 d i c m dicm dicm文件数据的有效读入(这里面涉及到的知识点我忘记了,我还傻乎乎的调用了 p y t h o n python python d i c m dicm dicm文件的库函数,后来学长指出我的错误,索性我就直接用了学长的读 d i c m dicm dicm文件的函数),注意是需要归一化操作的。

2、一开始我基本实现了功能之后我就没管挂机了,后面我组长(和我一起进行数据预处理工作,她要是有博客的话我就@她了,一个超好看的妹子 ),比对结果图和用软件打开的原图时发现有很大的问题(遇事不要慌,有问题就解决问题 ),切出来的肾癌部分完全对不上,而且纹路也不对,然后我就陷入了无穷的调 b u g bug bug中,但是始终不知道哪错了,其实现在回想起来当时应该发现第3条里面的错误的,但是并没有(因为自己懒 ),于是尝试失败!

3、之后向学长汇报结果,请教学长时,学长跟我们(我和前面提到的组长妹子)说,图片横纵坐标是反的,然后从 n r r d nrrd nrrd文件对应的 d i c m dicm dicm索引不是正向对应的,而是反向的(不是 i i i i i i的,而是 i i i l e n − 1 − i len-1-i len1i的),我幡然醒悟,原来我是这里没注意啊,赶紧又是滚回去调 b u g bug bug

4、经历过第3点的指点之后,我花了将近一周的时间(其实并没有,中间有上课的)修 b u g bug bug,然后对比结果图和软件打开的图,自我感觉应该没问题了,扔给组长仔细全面对比去了(其实是因为我电脑上的软件不知道为啥抽风了,不方便比对),然后组长妹子对比完之后告诉我还是不对,肾癌纹路不对,我懵逼,不知道为啥不对的情况下决定先确定一个事情----我没有切错帧(因为CT图是空间上的切片,所以大多数情况下前后帧差别不大),于是我经过不断地调代码跑图扔给组长(其实我也有对比的),最后总算是确定没有切错帧。这个时候问题来了,帧没错但是肿瘤部分纹路还是不对(我们的预处理是保留肿瘤部分,非肿瘤部分置为黑色背景色),我想了好久都没有想出来到底为啥。

5、在晚上睡不着的时候脑子里无意闪现出一个方法验证:因为肿瘤区域太小了不好比对,我们为何不反向操作,把肿瘤部分置为黑色,其他部分保留原色,这样不是可以同步解决两个问题:一个是4中的切错帧的问题,一个是为啥会纹路不对的问题。第二天就试了试我的想法,运行出来的效果图确实可以解决目前遇到的问题,错误一目了然:每个病人的图效果是反的(我把第一张图肿瘤的位置放在了最后一张图上去切,难怪会帧对纹路不对),仅花了半天就修好了我的 b u g bug bug脑子果然是个好东西 ),切出来的效果图也没出错了。(真的是难为我的组长了

6、目前效果图存在一点点小瑕疵:切出来的图感觉带上了一层蒙蒙的灰一样,清晰度没有软件的高(由于我不是搞计算机图形学的我不太懂),如果有哪位博主知道为什么以及怎么解决,本人万分感激,欢迎评论区留言讨论。

以下是我 p y t h o n python python代码实现的数据预处理,大部分都有解释,虽然我已经优化了代码的复杂度了,但是代码写得还是不够优美,实在抱歉,有困惑的地方欢迎留言:

# 从nrrd原图图像中单独切出肿瘤区域,寻找合适肿瘤图片尺寸并放置中心位置
# !!!注意请使用绝对路径,并且路径不要包含中文
import os;
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import nrrd
import pydicom
from scipy import ndimage
import cv2
  • 10
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值