.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分析网页上所有超链接的方法
May 08 Python
Python 常用string函数详解
May 30 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
对python字典过滤条件的实例详解
Jan 22 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
详解Python调用系统命令的六种方法
Jan 28 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
php常用图片处理类
2016/03/16 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
js中onload与onunload的使用示例
2013/08/25 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
js微信支付实现代码
2016/12/22 Javascript
Angular的$http与$location
2016/12/26 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
Numpy掩码式数组详解
2018/04/17 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
2014年大学生自我评价
2014/01/19 职场文书
庆元旦广播稿
2014/02/10 职场文书
物流业务员岗位职责
2015/04/03 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
七个非常实用的Python工具包总结
2021/06/15 Python
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS