.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实现的批量下载RFC文档
Mar 10 Python
python使用chardet判断字符串编码的方法
Mar 13 Python
Python3 中文文件读写方法
Jan 23 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
浅谈python写入大量文件的问题
Nov 09 Python
python GUI实现小球满屏乱跑效果
May 09 Python
Django框架 querySet功能解析
Sep 04 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 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实现通过URL提取根域名
2016/03/31 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
使用python编写监听端
2018/04/12 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
python模块如何查看
2020/06/16 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
python中random模块详解
2021/03/01 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
网络程序员自荐信
2014/01/25 职场文书
公司会计岗位职责
2014/02/13 职场文书
cf收人广告词大全
2014/03/14 职场文书
职业规划实施方案
2014/06/10 职场文书
暑期培训心得体会
2014/09/02 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL