# %load brain_tumor_3d.py import argparse import sys import os from MainWindow import * def redirect_vtk_messages(): """ Redirect VTK related error messages to a file.""" import tempfile tempfile.template = 'vtk-err' f = tempfile.mktemp('.log') log = vtk.vtkFileOutputWindow() log.SetFlush(1) log.SetFileName(f) log.SetInstance(log) def verify_type(file): ext = os.path.basename(file).split(os.extsep, 1) if ext[1] != 'nii.gz': parser.error("File doesn't end with 'nii.gz'. Found: {}".format(ext[1])) return file if __name__ == "__main__": parser = argparse.ArgumentParser(description='Reads Nii.gz Files and renders them in 3D.') parser.add_argument('-i', type=lambda fn: verify_type(fn), help='an mri scan (nii.gz)') parser.add_argument('-m', type=lambda fn: verify_type(fn), help='the segmentation mask (nii.gz)') args = parser.parse_known_args() redirect_vtk_messages() app = QtWidgets.QApplication(sys.argv) # with open("D:\VTK算法1\3d-nii-visualizer-master\visualizer\captk.qss") as css: #read_css = css.read() #app.setStyleSheet(read_css) app.BRAIN_FILE = args.i app.MASK_FILE = args.m window = MainWindow(app) sys.exit(app.exec_())
时间: 2024-04-15 12:25:26 浏览: 237
这段代码是一个用于读取和渲染3D Nii.gz文件的应用程序。它使用了argparse模块来解析命令行参数,并使用MainWindow类来创建一个GUI窗口。
在代码中,`-i`和`-m`是两个命令行参数,用于指定MRI扫描文件和分割掩模文件的路径。`verify_type`函数用于验证文件的扩展名是否为'nii.gz',并返回文件路径。这样可以确保输入的文件是符合要求的。
`redirect_vtk_messages`函数用于将VTK相关的错误消息重定向到一个文件中,以便后续检查和分析。
接下来,创建一个Qt应用程序`app`,并将命令行参数中的文件路径分配给`app.BRAIN_FILE`和`app.MASK_FILE`。然后,创建一个MainWindow对象`window`,并运行应用程序。
你可以使用命令行来运行这个脚本,并通过`-i`和`-m`参数来指定需要处理的MRI扫描文件和分割掩模文件。
相关问题
def predict_one_img(model, img_dataset, args): # def predict_one_img(model, img_dataset, data, target, args): dataloader = DataLoader(dataset=img_dataset, batch_size=1, num_workers=0, shuffle=False) model.eval() test_dice = DiceAverage(args.n_labels) # target = to_one_hot_3d(label, args.n_labels) with torch.no_grad(): for data ,target in tqdm(dataloader, total=len(dataloader)): # data = data.to(device) data, target = data.float(), target.long() target = to_one_hot_3d(target, args.n_labels) data, target = data.to(device), target.to(device) # print(data.shape) # print(target.shape) output = model(data) # output = nn.functional.interpolate(output, scale_factor=(1//args.slice_down_scale,1//args.xy_down_scale,1//args.xy_down_scale), mode='trilinear', align_corners=False) # 空间分辨率恢复到原始size img_dataset.update_result(output.detach().cpu()) pred = img_dataset.recompone_result() pred = torch.argmax(pred, dim=1) pred_img = to_one_hot_3d(pred, args.n_labels) pred_img=pred_img.to(device) test_dice.update(pred_img, target) test_dice = OrderedDict({'Dice_liver': test_dice.avg[1]}) if args.n_labels == 3: test_dice.update({'Dice_tumor': test_dice.avg[2]}) pred = np.asarray(pred.numpy(), dtype='uint8') if args.postprocess: pass # TO DO pred = sitk.GetImageFromArray(np.squeeze(pred, axis=0)) return test_dice, pred
这是一个用于预测单张图像的函数,接收一个模型、一个图像数据集和一些参数作为输入。函数首先将图像数据集加载到一个Dataloader中,然后将模型设置为评估模式并初始化一个DiceAverage对象,该对象用于计算评估指标(这里是Dice系数)。在没有梯度的情况下,对于每个数据和目标对,函数将数据和目标转换为模型所需的格式(浮点数和one-hot编码),并将它们传递给模型进行预测。预测结果被转换回原来的空间分辨率,然后被添加到图像数据集中。最后,预测结果被重新组合成一个numpy数组,并被转换为一个SimpleITK图像对象并返回。如果需要,可以在预测之后对预测结果进行后处理。函数返回测试指标和预测结果。
我的LiTS2017数据集是二维的数据集。数据集里面有命名为train_liver_tumor2的文件夹和命名为liver_tumor2_label的文件夹。train_liver_tumor2文件夹里面有图像,图像的拓展名为.png。liver_tumor2_label文件夹里面有标签,标签拓展名为.png。 修改代码: def windowing(img, window_width, window_center): # params:需要增强的图片, 窗口宽度, 窗中心 通过窗口最小值来线性移动窗口增强 min_windows = float(window_center)-0.5*float(window_width) new_img = (img-min_windows)/float(window_width) new_img[new_img<0] = 0 # 二值化处理 抹白 new_img[new_img>1] = 1 # 抹黑 return (new_img * 255).astype('uint8') # 把数据整理成标准图像格式 img_ct = windowing(img_array, 500, 150) 我的二维LiTS2017数据集的路径为E:\2D-LiTS2017\肝脏加肿瘤。保存路径为E:\增强。帮我创建保存图像与标签的文件夹,并且将转换好的数据保存到对应的文件夹。
好的,可以使用下面的代码来实现你的需求:
```python
import os
import numpy as np
from PIL import Image
def windowing(img, window_width, window_center):
# params:需要增强的图片, 窗口宽度, 窗中心
# 通过窗口最小值来线性移动窗口增强
min_windows = float(window_center)-0.5*float(window_width)
new_img = (img-min_windows)/float(window_width)
new_img[new_img<0] = 0 # 二值化处理 抹白
new_img[new_img>1] = 1 # 抹黑
return (new_img * 255).astype('uint8')
# 设置路径
data_dir = 'E:/2D-LiTS2017/肝脏加肿瘤'
save_dir = 'E:/增强'
# 创建保存图像和标签的文件夹
os.makedirs(os.path.join(save_dir, 'images'), exist_ok=True)
os.makedirs(os.path.join(save_dir, 'labels'), exist_ok=True)
# 遍历数据集中的所有图像和标签
for filename in os.listdir(os.path.join(data_dir, 'train_liver_tumor2')):
if filename.endswith('.png'):
# 读取图像和标签
img_path = os.path.join(data_dir, 'train_liver_tumor2', filename)
label_path = os.path.join(data_dir, 'liver_tumor2_label', filename)
img = np.array(Image.open(img_path))
label = np.array(Image.open(label_path))
# 增强图像
img_enhanced = windowing(img, 500, 150)
# 保存增强后的图像和标签
img_enhanced = Image.fromarray(img_enhanced)
img_enhanced.save(os.path.join(save_dir, 'images', filename))
label = Image.fromarray(label)
label.save(os.path.join(save_dir, 'labels', filename))
```
这段代码会将原始图像和标签文件夹中的所有`.png`文件进行增强并保存到对应的文件夹中。请确保你的数据集路径和保存路径正确,并且所有的图像和标签文件都是`.png`格式。
阅读全文