《深度学习与医学图像处理》阅读心得3:数据预处理
<div class='showpostmsg'> 本帖最后由 kkompp 于 2024-5-23 23:44 编辑<p> 由于最近一段时间出差,不能就书中的示例代码进行调试,刚刚看了看论坛要求,阅读活动截止到4月30日。很是抱歉。</p>
<p> 《深度学习与医学图像处理》的第四章是:数据预处理,也就是把用医疗设备采集到的数据进行预处理。说是预处理,其实还是数字图像处理,就是对图像进行噪声去除、数据增强、特征提取等图像处理技术。医学图像处理在医院应用非常广泛,在实际诊断中,由于设备质量,采集等原因,医学成像质量有很大不同,随着AI技术的发展,医学数字图像由于设备差异、多模态、噪声等问题都会对模型的训练造成很大的困难。本书第四章主要是通过深度学习的方法对主流医学数字图像进行处理,包括插值、重采样、直方图的分析与均衡化、数据归一化、连通域分析与形态学方法等。</p>
<p> 书中就常见的数据增强方式、弹性形变以及基于TensorFlow的在线数据增强方法进行了介绍,给出了主要代码。</p>
<p> 本章内容用到的算法主要使用SimpleITK、Numpy,Scikit-image,TensorFlow,Matplotlib,math,elasticdeform等库进行实现。</p>
<p>一 库函数版本号</p>
<p> 书中用到的示例代码库函数版本号如下:</p>
<p> # Simpleitk==2.0.2<br />
# matplotlib==3.1.3<br />
# numpy==1.18.1<br />
# elasticdeform==0.4.9<br />
# scikit-image==0.16.2<br />
# tensorflow==1.15.0</p>
<p>二 导入相关的库</p>
<p> import math<br />
import SimpleITK as sitk<br />
import matplotlib.pyplot as plt<br />
import numpy as np<br />
import elasticdeform as edf<br />
from skimage import measure, color, morphology, transform, exposure, data, io<br />
import tensorflow as tf</p>
<p> 我们用pycharm打开,并用pip安装对应的版本库</p>
<p> 点击运行,没有报错,说明需要的库都安装正确。</p>
<p>三 SimpleITK</p>
<p> 这里重点要说明SimpleITK,由于书中章节安排,没有对SimpleITK进行详细介绍,安装SimpleITK的时候可能会出错,所以版本的一致性很是重要。SimpleITK需要与python版本对应。SimpleITK是专门处理<a data-pretit="医学影像" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=%E5%8C%BB%E5%AD%A6%E5%BD%B1%E5%83%8F&spm=1001.2101.3001.7020","extra":"{\"searchword\":\"医学影像\"}"}" data-tit="医学影像" href="https://so.csdn.net/so/search?q=%E5%8C%BB%E5%AD%A6%E5%BD%B1%E5%83%8F&spm=1001.2101.3001.7020" target="_blank">医学影像</a>的软件,是ITK的简化接口,使用起来非常便捷,SimpleITK支持8种编程语言,包括c++、Python、R、Java、c#、Lua、Ruby和TCL。SimpleITK中图像是一个物理实体,图像中的每一个像素都是物理空间中的一个点,不光有着像素值,还有坐标、间距、方向等概念。</p>
<p>在使用SimpleITK库之前,需要将SimpleITK库导入进来,如下:</p>
<pre data-index="0">
<code>import SimpleITK as sitk</code></pre>
<p> </p>
<p>SimpleITK可以读取如.mhd , .nii, .nrrd等图像数据格式。</p>
<p>四 数据预处理:插值法</p>
<p> 插值法在书中主要采用skimage的两种插值方法进行图像缩放,一个是最近邻域法,一个是线性插值法。这是两种不同的算法。</p>
<p>书中定义了一个函数如下:</p>
<p>def Linear_interpolation(img, target_shape, interpolation_method):<br />
if interpolation_method == 'nearest_neighbor':<br />
return transform.resize(img, target_shape, order=0, preserve_range=True)<br />
elif interpolation_method == 'bilinear':<br />
return transform.resize(img, target_shape, order=1, preserve_range=True)<br />
else:<br />
raise NameError('Undefined Method.')</p>
<p>我们把这段代码用pycharm进行实现如下图所示</p>
<p> </p>
<p>定义好函数,我们进行调用</p>
<p>测试图片采用第三章3dslicer中处理的图像如下图所示</p>
<p> </p>
<p> </p>
<p> 接下来用最近邻域法与线性插值法进行处理,结果如下图所示</p>
<p> </p>
<p>图中,nn是最近邻域法,bil是双线性插值法。</p>
<p>需要注意这里数据导入需要采用skimage的数据导入</p>
<p>五 重采样的实现</p>
<p> 由于调试问题,重采样的实现下次实现。</p>
<p> </p>
<p> </p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]