.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实现获取域名所用服务器的真实IP
Oct 25 Python
Python实现Youku视频批量下载功能
Mar 14 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
python基础教程项目三之万能的XML
Apr 02 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python hashlib模块加密过程解析
Nov 05 Python
为什么说python适合写爬虫
Jun 11 Python
Django Form设置文本框为readonly操作
Jul 03 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
Python如何让字典保持有序排列
Apr 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生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP输出日历表代码实例
2015/03/27 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
jquery使用经验小结
2015/05/20 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
Augularjs-起步详解
2016/07/08 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
python关键字and和or用法实例
2015/05/28 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python实现linux下抓包并存库功能
2018/07/18 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python爬虫增加访问量的方法
2019/08/22 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
大学生实习期自我评价范文
2013/10/03 职场文书
劳资专员岗位职责
2013/12/27 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
老师的检讨书
2014/02/23 职场文书
2015入党自传书范文
2015/06/26 职场文书
党员心得体会范文2016
2016/01/23 职场文书
总结Python常用的魔法方法
2021/05/25 Python
MySQL派生表联表查询实战过程
2022/03/20 MySQL
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技