.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并发编程之线程实例解析
Dec 27 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
django使用admin站点上传图片的实例
Jul 28 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
pytorch 修改预训练model实例
Jan 18 Python
Python 去除字符串中指定字符串
Mar 05 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
python tkinter模块的简单使用
Apr 07 Python
Python深度学习之实现卷积神经网络
Jun 05 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 Python
利用Python多线程实现图片下载器
Mar 25 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与SQL注入攻击[二]
2007/04/17 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
PHP实现小偷程序实例
2016/10/31 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
JavaScript中的私有成员
2006/09/18 Javascript
更正确的asp冒泡排序
2007/05/24 Javascript
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
django主动抛出403异常的方法详解
2019/01/04 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
世界最大的票务市场:viagogo
2017/02/16 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
教师工作决心书
2015/02/04 职场文书