.dcm格式文件软件读取及python处理详解


Posted in Python onJanuary 16, 2020

要处理一些.DCM格式的焊接缺陷图像,需要读取和显示.dcm格式的图像。通过搜集资料收集到一些医学影像,并通过pydicom模块查看.dcm格式文件。

若要查看dcm格式文件,可下Echo viewer 进行查看。

若用过pycharm进行处理,可选用如下的代码:

# -*-coding:utf-8-*-
import cv2
import numpy
import dicom
from matplotlib import pyplot as plt

dcm = dicom.read_file("dcm")
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept

slices = []
slices.append(dcm)
img = slices[int(len(slices) / 2)].image.copy()
ret, img = cv2.threshold(img, 90, 3071, cv2.THRESH_BINARY)
img = numpy.uint8(img)

im2, contours, _ = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = numpy.zeros(img.shape, numpy.uint8)
for contour in contours:
  cv2.fillPoly(mask, [contour], 255)
img[(mask > 0)] = 255

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

img2 = slices[int(len(slices) / 2)].image.copy()
img2[(img == 0)] = -2000

plt.figure(figsize=(12, 12))
plt.subplot(131)
plt.imshow(slices[int(len(slices) / 2)].image, 'gray')
plt.title('Original')
plt.subplot(132)
plt.imshow(img, 'gray')
plt.title('Mask')
plt.subplot(133)
plt.imshow(img2, 'gray')
plt.title('Result')
plt.show()

也可用如下代码:

import pydicom
import os
import numpy
from matplotlib import pyplot, cm
# 用lstFilesDCM作为存放DICOM files的列表
PathDicom = "dicom/2" #与python文件同一个目录下的文件夹
lstFilesDCM = []
for dirName,subdirList,fileList in os.walk(PathDicom):
  for filename in fileList:
    if ".dcm" in filename.lower(): #判断文件是否为dicom文件
      print(filename)
      lstFilesDCM.append(os.path.join(dirName,filename)) # 加入到列表中
## 将第一张图片作为参考图
RefDs = pydicom.read_file(lstFilesDCM[0])  #读取第一张dicom图片
# 建立三维数组
ConstPixelDims = (int(RefDs.Rows),int(RefDs.Columns),len(lstFilesDCM)) # 得到spacing值 (mm为单位)
ConstPixelSpacing = (float(RefDs.PixelSpacing[0]), float(RefDs.PixelSpacing[1]), float(RefDs.SliceThickness))
# 三维数据
x = numpy.arange(0.0, (ConstPixelDims[0]+1)*ConstPixelSpacing[0], ConstPixelSpacing[0]) # 0到(第一个维数加一*像素间的间隔),步长为constpixelSpacing
y = numpy.arange(0.0, (ConstPixelDims[1]+1)*ConstPixelSpacing[1], ConstPixelSpacing[1]) #
z = numpy.arange(0.0, (ConstPixelDims[2]+1)*ConstPixelSpacing[2], ConstPixelSpacing[2]) #
ArrayDicom = numpy.zeros(ConstPixelDims, dtype=RefDs.pixel_array.dtype)
for filenameDCM in lstFilesDCM:
  ds = pydicom.read_file(filenameDCM)
  ArrayDicom[:, :, lstFilesDCM.index(filenameDCM)] = ds.pixel_array # 轴状面显示
  pyplot.figure(dpi=300)
  pyplot.axes().set_aspect('equal', 'datalim')
  pyplot.set_cmap(pyplot.gray())
  pyplot.pcolormesh(x, y, numpy.flipud(ArrayDicom[:, :, 2])) # 第三个维度表示现在展示的是第几层
  pyplot.show()

这两个代码都是可以进行读取的。但是不知道为什么在焊接检测中的dcm图像却无法进行读取。

以上这篇.dcm格式文件软件读取及python处理详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
python list格式数据excel导出方法
Oct 31 Python
安装docker-compose的两种最简方法
Jul 30 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Python原始套接字编程实例解析
Jan 29 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
Django基于客户端下载文件实现方法
Apr 21 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
python如何建立全零数组
Jul 19 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 Python
用python解压分析jar包实例
Jan 16 #Python
Python3 实现爬取网站下所有URL方式
Jan 16 #Python
python3爬取torrent种子链接实例
Jan 16 #Python
Python 实现自动获取种子磁力链接方式
Jan 16 #Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 #Python
Python简单实现区域生长方式
Jan 16 #Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 #Python
You might like
php不用正则验证真假身份证
2013/11/06 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
js 匿名调用实现代码
2009/06/19 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
python装饰器使用方法实例
2013/11/21 Python
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python中的Numpy入门教程
2014/04/26 Python
Python中有趣在__call__函数
2015/06/21 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
浅析Python中signal包的使用
2015/11/13 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
2014年度安全工作总结
2014/12/04 职场文书
助学金感谢信
2015/01/20 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python