CT医学图像去床

import os
import pydicom
import SimpleITK as sitk
import numpy as np
import cv2

dcm_path = '路径'  # 绝对路径

def read_dicom_data(file_name):
    file = sitk.ReadImage(file_name)
    data = sitk.GetArrayFromImage(file)

    data = np.squeeze(data, axis=0)
    data = np.int32(data)

    dicom_dataset = pydicom.dcmread(file_name)

    slice_location = dicom_dataset.SliceLocation

    return data, data.shape[0], data.shape[1], slice_location

def change_to_lung_window(img_data):
  
    img_data[img_data < -1000] = -1000
    img_data[img_data > 500] = 500

    # 纵隔窗模式
    # img_data[img_data < -150] = -150
    # img_data[img_data > 250] = 250
    return img_data

def find_max_region(mask_sel):
    __, contours,hierarchy = cv2.findContours(mask_sel,cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
 
    #找到最大区域并填充 
    area = []
 
    for j in range(len(contours)):
        area.append(cv2.contourArea(contours[j]))
 
    max_idx = np.argmax(area)
 
    max_area = cv2.contourArea(contours[max_idx])
 
    for k in range(len(contours)):
    
        if k != max_idx:
            cv2.fillPoly(mask_sel, [contours[k]], 0)
    return mask_sel


pixel_array, rows, columns, slice_location = read_dicom_data(dcm_path)
pixel_array = change_to_lung_window(pixel_array)
imageData = (pixel_array - pixel_array.min()) * 255.0 / (pixel_array.max() - pixel_array.min())
imageData = np.uint8(imageData)
cv2.imshow('CT', imageData)
cv2.waitKey()

__, mask = cv2.threshold(imageData, 127, 255, 0)
cv2.imshow('Binary', mask)
cv2.waitKey()

mask_max_region = find_max_region(mask)
cv2.imshow('Max Region', mask_max_region)
cv2.waitKey()

h, w = mask_max_region.shape[:2]
mask_tp = np.zeros((h+2, w+2), np.uint8)

temp = mask_max_region.copy()
temp2 = mask_max_region.copy()
cv2.floodFill(temp, mask_tp, (1, 1), 255)

cv2.floodFill(temp2, mask_tp, (w - 2, h - 2), 255)
temp2[temp > 0] = 255

rt = cv2.bitwise_not(temp)
temp2[temp2 == 0] = 1
temp2[temp2 == 255] = 0
mask_max_region[temp2 > 0] = 255

image_process = np.uint8((mask_max_region / 255)  * imageData)
cv2.imshow('Result', image_process)
cv2.waitKey()
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好!CT医学图像自动分割是一个非常有挑战性和重要的任务。深度学习方法已经被广泛应用于CT图像的自动分割。 在深度学习中,卷积神经网络(Convolutional Neural Networks,CNNs)是最常用的模型。它们通过学习图像的特征来进行像素级别的分割。常见的CNN架构包括U-Net、FCN(Fully Convolutional Network)和SegNet等。 U-Net是一种非常流行的架构,特别适用于图像分割任务。它具有一个编码器部分和一个解码器部分。编码器用于提取图像的高级特征,解码器则将这些特征映射回原始图像的大小,并生成分割结果。U-Net考虑了上下文信息和低级特征,使得分割结果更准确。 除了CNN模型外,还可以使用其他深度学习技术,如图像分割中的条件随机场(Conditional Random Fields,CRF)和生成对抗网络(Generative Adversarial Networks,GANs)。这些模型可以提高分割结果的准确性和细节。 要训练深度学习模型进行CT图像的自动分割,通常需要大量标注好的数据集。这些数据集包含了CT图像以及相应的分割标签。使用这些数据集,可以通过在深度学习框架中进行训练和优化来获得高性能的分割模型。 当然,还有许多其他方法和技术可以用于CT医学图像的自动分割。深度学习医学图像分割领域取得了显著的进展,但仍有许多挑战需要克服。希望这个回答对您有所帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值