728|0

238

帖子

4

TA的资源

纯净的硅(初级)

《深度学习与医学图像处理》【学习分享5】医学数字图像的数据预处理 [复制链接]

在实际应用场景中,获取的原始数据可能会存在一些问题,例如图片尺寸、对比度不统一等,需要进行一些预处理,才能用于模型的训练。

 

一、扩展库安装

通过本书第4章的学习,了解到,通常会使用SimpleTK、NumPy、sickit-image、TensorFlow等库进行处理。

要使用这些库进行处理,需要先使用pip进行安装:

pip install SimpleITK
pip install scikit-image
pip install elasticdeform
pip install tensorflow

另外,还有些安装一些图形处理库,方便可视化:

pip install pillow
pip instal matplotlib
pip install python-opencv

 

二、导入需要使用的库

然后就可以在代码中,引入响应的库,以便后续代码调用:

import math
import SimpleITK as sitk
import matplotlib.pyplot as plt
import numpy as np
import elasticdeform as edf
from skimage import measure, color, morphology, transform, exposure, data, io
import tensorflow as tf

from PIL import Image
import cv2

 

三、数据预处理

1. 插值:

插值法是很常见的图像处理算法,通常使用最邻近插值法和双线性插值法。

 

最邻近插值法是最简单的插值法,基本原理如下图:

image.png  

双线性插值法的原理如下图:

 

bli_fig.png
 
其原理效果效果如下:
image.png  

 

 

两重插值法对应的代码如下:

# 采用最近插值法或线性插值法
def Linear_interpolation(img, target_shape, interpolation_method):
    if interpolation_method == 'nearest_neighbor':
        return transform.resize(img, target_shape, order=0, preserve_range=True)
    elif interpolation_method == 'bilinear':
        return transform.resize(img, target_shape, order=1, preserve_range=True)
    else:
        raise NameError('Undefined Method.')

 

我是用了一张颅内CT检查的DICOM样本数据来进行测试,结合之之前的代码,进一步进行处理:

# 图片转换为SimpleITK图片格式
skit_img = img_as_float(np.asarray(final_image))

# 调用最近邻插值法处理
nearest_neighbor_img = Linear_interpolation(skit_img, (512, 512), 'nearest_neighbor')

# 调用双线性插值法处理
biliner_img = Linear_interpolation(skit_img, (512, 512), 'bilinear')

# 存储图片
cv_image1 = img_as_ubyte(nearest_neighbor_img)
cv2.imwrite("1.jpg", cv_image1)

cv_image2 = img_as_ubyte(biliner_img)
cv2.imwrite("2.jpg", cv_image1)

# 显示图片
plt.figure()

plt.subplot(2,2,1)
plt.imshow(np.asarray(final_image),cmap='gray')


plt.subplot(2,2,3)
plt.imshow(nearest_neighbor_img,cmap='gray')

plt.subplot(2,2,4)
plt.imshow(biliner_img,cmap='gray')

plt.show()

image.png  

不过上面的图片中,可能看不到较为显著的差别,需要进一步放大,才能看到差异。

 

2. 重采样

根据采样设备的不同,获取的数医学图像的像素间距可能存在差异,这就需要进行预处理,重采样为统一标准的图像,以便进行训练。

重采样的时候,还需要考虑使用合理的插值算法:真实尺寸 = 像素个数 * 像素间距

医学数据重采样常见的算法如下:

# 重采样
def Resample(sitkimg, spacing = None, resolution=None, interpolation = 0):
    spacing_ori = np.array(sitkimg.GetSpacing())
    resolution_ori = np.array(sitkimg.GetSize())
    inte = sitk.sitkNearestNeighbor if interpolation == 0 else sitk.sitkLinear
    if spacing:
        f = spacing_ori / spacing
        resolution = np.int32(np.round(resolution_ori * f))
    elif resolution:
        resolution = np.array(resolution)
        f = resolution / resolution_ori
        spacing = spacing_ori / f
    else:
        return sitkimg

    origin = np.array(0.5 * (spacing - spacing_ori) / spacing_ori)
    origin = sitkimg.TransformContinuousIndexToPhysicalPoint(origin)
    rs = sitk.ResampleImageFilter()
    rs.SetOutputSpacing(spacing)
    rs.SetOutputOrigin(origin)
    rs.SetSize(resolution.tolist())
    rs.SetOutputDirection(sitkimg.GetDirection())
    rs.SetOutputPixelType(sitkimg.GetPixelID())
    rs.SetInterpolator(inte)
    rs_sitkimg = rs.Execute(sitkimg)
    return rs_sitkimg

 

继续使用前面的原始图像数据,将原始图片,转换为像素间距为(0.5, 0.5)的数据,对应的调用代码如下:

origin = np.array(final_image)
skitimg_origin = sitk.GetImageFromArray(origin)

plt.figure()
plt.subplot(1,2,1)
plt.imshow(sitk.GetArrayFromImage(skitimg_origin),cmap='gray')
# plt.show()

spacing_ori = np.array(skitimg_origin.GetSpacing())
resolution_ori = np.array(skitimg_origin.GetSize())
print("spacing_ori: ", spacing_ori)
print("resolution_ori: ", resolution_ori)
skit_img_resample = Resample(skitimg_origin, spacing = (0.5, 0.5), resolution = None, interpolation = 0)

plt.subplot(1,2,2)
plt.imshow(sitk.GetArrayFromImage(skit_img_resample),cmap='gray')
plt.show()

 

实际处理后的效果如下:

image.png  

上面的结果中,两个图看起来一样,但是从图像的刻度可以看到,像素间距已经不同了。

 

3. 信号强度直方图的分析和均衡化

根据采样设备的不同,获取的数医学图像的信号强度也会存在差异,导致强度分布不统一。

这就需要使用到信号强度分析和处理,可以试用Matplotlib和Skimage进行信号强度的处理,对应的代码如下:

# 信号强度直方图的均衡化
def Histogram_equalization(img):
    # 显示原图像
    plt.subplot(2,2,1)
    plt.imshow(img, cmap='gray')
    plt.gca().invert_yaxis()
    # plt.show()

    # 显示原图像信号强度
    plt.subplot(2,2,2)
    n, bins, patches = plt.hist(img, bins=5, facecolor='red', alpha=0.75)
    # plt.show()

    # 信号强度直方图的均衡化和可视化
    img_res = exposure.equalize_hist(img)
    plt.subplot(2,2,3)
    plt.imshow(img_res, cmap='gray')
    plt.gca().invert_yaxis()
    # plt.show()

    # 显示均衡化后的信号强度直方图
    plt.subplot(2,2,4)
    n, bins, patches = plt.hist(img_res, bins=5, facecolor='red', alpha=0.75)
    # plt.show()
    return img_res

 

对应的调用代码如下:

plt.figure()
skitimg_res = Histogram_equalization(sitk.GetArrayFromImage(skitimg_origin))
plt.show()

最终的结果如下:

image.png   从上图可以看到,原有图像较暗,处理后的图像对比度提高,能够更好的进行分析处理。

 

 

医学图像数据处理中,还包括数据归一化、连通域分析、形态学方法处理等,这里就不一一展示了。

经过合适的数据处理,就能够让原始的数据变得统一规范,方便后续的训练操作了。

此帖出自医疗电子论坛

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

推荐帖子
那有protues仿真软件下啊??

:) :) :) :) 那有protues仿真软件下啊??

很想知道学会了单片机研发,工资一般能拿多少啊?能达到6000吗?

很想知道学会了单片机研发,工资一般能拿多少啊?能达到6000吗?

单片机系统外围电路中的电子器件选型简单指南

各种类型电阻选用经验 1.固定电阻器的选用 固定电阻器有多种类型,选择哪一种材料和结构的电阻器, 应根据应用电路的具体要求 ...

有人询问NANDFLASH的寻址方式,简单说下

Nand Flash结构与读写分析 NAND Flash 的数据是以bit 的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些ce ...

我这样考虑问题,对不对呢?请大家帮忙出出主意。

已经很晚了,快一点了,可是我静不下来。 明天是周一,可是我们新进的员工, 自从培训结束以后,公司就没有给我们安排什么了。 ...

TMS320C6678开发例程使用手册学习之四

查看仿真器是否安装成功 如下TMS320C6678开发,均以TL-XDS560V2仿真器为例。开发板断电,连接好仿真器和开发板,并将仿真器的 ...

请教芯片失效分析

请教各位大佬一个问题,芯片VCC与GNG之间的阻抗异常,怎么去查问题? 有的表现为8Ω,有的是220Ω。基本都不一样。 ...

[ ST NUCLEO-U575ZI-Q 测评] keil pack包安装

准备用mdk开发,首先要下载pack包,找到官网下载址:MDK5 Software Packs (keil.com) 664509 664510 664511 双击运行: ...

1.01K换成1.02K或1K会影响多少?

今天供应商那边说有一颗物料没有了,【1.01K 1% 0603】的电阻,这个项目已经定型很久了,然后我看了一下这颗物料,原理图确实是 ...

电容失效找不到分析方向

703456703455 麻烦各位大佬帮忙分析下,最近遇到很多C2电容开裂短路的问题,在排除应力损伤的原因,是否在设计上存在缺陷?谢 ...

关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表