DICOM读取与阈值分割代码

原链接 https://www.cnblogs.com/dhanchor/p/7193472.html

发现出错,大记录是opencv的使用版本,重新改了下

import cv2
import numpy as np
import pydicom
import matplotlib.pyplot as plt

path_file = r'D:\Mr.Yu\SE02\IM000009'
dcm = pydicom.read_file(path_file)
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept  # 为啥
print(dcm.image)  # 图像的数据
slices = []
slices.append(dcm)
print(slices)  # dcm相关Tag

# img = slices[int(len(slices)/2)].image.copy() # <class 'numpy.ndarray'> shape(512,512)  为什么要 /2
img = slices[0].image.copy()
print(30*'-')

ret,img = cv2.threshold(img,90, 3071,cv2.THRESH_BINARY)

img = np.uint8(img)

plt.figure(figsize=(12,12))
plt.subplot(141)
plt.imshow(img,'gray')
plt.title('threshold')


contours,hierarchy = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

cv2.imshow('img',img)
cv2.waitKey(0)


# plt.imshow(contours)
mask = np.zeros(img.shape, np.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.subplot(142)
plt.imshow(slices[int(len(slices)/2)].image, 'gray')
plt.title('Original')
plt.subplot(143)
plt.imshow(img, 'gray')
plt.title('Mask')
plt.subplot(144)
plt.imshow(img2, 'gray')
plt.title('Result')
plt.show()


可以跑了,自己改文件名

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值