用于医学影像学深入学习的compagnon图书馆

torchmed的Python项目详细描述


扭转

阅读并处理pytorch中的医学图像。

Build Statuscodecov


该库是一种灵活处理各种N维图像的工具。 通过一组基于著名项目(simpleitk、nibabel、opencv、枕头)的图像readers。 您将能够加载数据。一旦加载,原始的特定子采样 数据使用patterns(描述提取内容/方法)和samplers执行 (检查提取位置)。

使用readerssamplerspatterns,您可以组成dataset 非常适合火把。

安装

来自PIP:

pip install torchmed

本地:

python install setup.py

用法

读卡器

>>>importtorchmed>>>image=torchmed.readers.SitkReader('prepro_im_mni_bc.nii.gz')>>>label_map=torchmed.readers.SitkReader('prepro_seg_mni.nii.gz')# gets image data>>>image_array=image.to_torch()>>>label_array=label_map.to_torch()>>>image_array.size()torch.Size([182,218,182])>>>type(image_array)<class'torch.Tensor'>>>>label_array[0,0,0]tensor(0.)# also available for Numpy>>>type(image.to_numpy())<class'numpy.ndarray'>

模式

模式对于指定如何从图像中提取数据非常有用。 可以在一个或多个图像上应用多个图案。

>>>importtorchmed>>>image=torchmed.readers.SitkReader('prepro_im_mni_bc.nii.gz')>>>square_patch=torchmed.patterns.SquaredSlidingWindow([182,7,182],use_padding=False)# initialize the pattern with the image properties>>>square_patch.prepare(image_arr)# can_apply checks if a pattern can be applied at a given position>>>square_patch.can_apply(image_arr,[0,0,0])False>>>square_patch.can_apply(image_arr,[91,4,91])True>>>square_patch.can_apply(image_arr,[91,3,91])True>>>square_patch.can_apply(image_arr,[91,2,91])False>>>square_patch.can_apply(image_arr,[91,154,91])True# to extract a patch at a correct position>>>sample=square_patch(image_arr,[91,154,91])>>>sample.size()torch.Size([182,7,182])

采样器

多处理采样器自动搜索采样点坐标 (模式提取)是可能的。

>>>fromtorchmed.readersimportSitkReader>>>fromtorchmed.samplersimportMaskableSampler>>>fromtorchmed.patternsimportSquaredSlidingWindow# maps a name to each image>>>file_map={...'image_ref':SitkReader('prepro_im_mni_bc.nii.gz',...torch_type='torch.FloatTensor'),...'target':SitkReader('prepro_seg_mni.nii.gz',...torch_type='torch.LongTensor')...}# sliding window pattern>>>patch2d=SquaredSlidingWindow(patch_size=[182,7,182],use_padding=False)# specify a pattern for each input image>>>pattern_mapper={'input':('image_ref',patch2d),...'target':('target',patch2d)}# muli-processed sampler with offset>>>sampler=MaskableSampler(pattern_mapper,offset=[91,1,91],nb_workers=4)>>>sampler.build(file_map)>>>len(sampler)212>>>sample=sampler[0]>>>type(sample)<class'tuple'>>>>sample[0].size()torch.Size([3])>>>sample[1].size()torch.Size([182,7,182])>>>sample[2].size()torch.Size([182,7,182])

数据集

MedFileMedFolder是iterable数据集,从输入返回样本 数据。下面是一个如何从图像列表构建MedFolder的示例。 aMedFolder接受MedFiles的列表作为输入。

importosfromtorchmed.datasetsimportMedFile,MedFolderself.train_dataset=MedFolder(self.generate_medfiles(os.path.join(base_dir,'train'),nb_workers))defgenerate_medfiles(self,dir,nb_workers):# database composed of dirname contained in the allowed_data.txtdatabase=open(os.path.join(dir,'allowed_data.txt'),'r')patient_list=[line.rstrip('\n')forlineindatabase]medfiles=[]# builds a list of MedFiles, one for each folderforpatientinpatient_list:ifpatient:patient_dir=os.path.join(dir,patient)patient_data=self.build_patient_data_map(patient_dir)patient_file=MedFile(patient_data,self.build_sampler(nb_workers))medfiles.append(patient_file)returnmedfilesdefbuild_patient_data_map(self,dir):# pads each dimension of the image on both sides.pad_reflect=Pad(((1,1),(3,3),(1,1)),'reflect')file_map={'image_ref':SitkReader(os.path.join(dir,'prepro_im_mni_bc.nii.gz'),torch_type='torch.FloatTensor',transform=pad_reflect),'target':SitkReader(os.path.join(dir,'prepro_seg_mni.nii.gz'),torch_type='torch.LongTensor',transform=pad_reflect)}returnfile_mapdefbuild_sampler(self,nb_workers):# sliding window of size [184, 7, 184] without paddingpatch2d=SquaredSlidingWindow(patch_size=[184,7,184],use_padding=False)# pattern map links image id to a Samplerpattern_mapper={'input':('image_ref',patch2d),'target':('target',patch2d)}# add a fixed offset to make patch sampling faster (doesn't look for all positions)returnMaskableSampler(pattern_mapper,offset=[92,1,92],nb_workers=nb_workers)

示例

有关更实际的用例,请参见示例的datasets文件夹。

学分

评估指标主要基于medpy。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
尝试分配哈希集时,java LazyInitializationException出现异常   java如何在Hadoop映射器中将字符串转换为可写对象   java如何从构造函数访问数组   java如何分别读取整数和数字   格拉德尔爪哇。尝试生成诱惑报告时出现lang.NullPointerException   java在上传到AWS S3 bucket时更改文件名   在Java字符串和StringBuffer中处理文本的类之间的差异   web服务Java EE应用程序之间的web服务通信   java LibGDX如何清除屏幕   Java:为什么是字符串。compareIgnoreCase()使用两个字符。toUpperCase()和字符。toLowerCase()?   java记录器不在SpringMVC中工作   java声明变量但不初始化它会提高性能吗?   java组件对象为空,自动连线注释使用此对象   java如何在JAR(背景音乐)中播放长的音频剪辑?   从python/django学习java/spring   在我的例子中是java锁+HasMap还是ConcurrentHashMap?   java降低反应器中的组通量   在ubuntu 15.10中运行uiautomatorviewer时出现java错误   向com提供凭据。亚马逊。区域。区域AWS Java SDK 1.4.0中的createClient()   java ActiveMQ重新交付将无效消息发送到Q的背面