最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytorch 使用 nii數(shù)據(jù)做輸入數(shù)據(jù)的操作

 更新時(shí)間:2020年05月26日 17:02:03   作者:evanna-y  
這篇文章主要介紹了Pytorch 使用 nii數(shù)據(jù)做輸入數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用pix2pix-gan做醫(yī)學(xué)圖像合成的時(shí)候,如果把nii數(shù)據(jù)轉(zhuǎn)成png格式會損失很多信息,以為png格式圖像的灰度值有256階,因此直接使用nii的醫(yī)學(xué)圖像做輸入會更好一點(diǎn)。

但是Pythorch中的Dataloader是不能直接讀取nii圖像的,因此加一個(gè)CreateNiiDataset的類。

先來了解一下pytorch中讀取數(shù)據(jù)的主要途徑——Dataset類。在自己構(gòu)建數(shù)據(jù)層時(shí)都要基于這個(gè)類,類似于C++中的虛基類。

自己構(gòu)建的數(shù)據(jù)層包含三個(gè)部分

class Dataset(object):
"""An abstract class representing a Dataset.
All other datasets should subclass it. All subclasses should override
``__len__``, that provides the size of the dataset, and ``__getitem__``,
supporting integer indexing in range from 0 to len(self) exclusive.
"""
def __getitem__(self, index):
 raise NotImplementedError
def __len__(self):
 raise NotImplementedError
def __add__(self, other):
 return ConcatDataset([self, other])

根據(jù)自己的需要編寫CreateNiiDataset子類:

因?yàn)槲沂腔?a rel="external nofollow" target="_blank" >https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

做pix2pix-gan的實(shí)驗(yàn),數(shù)據(jù)包含兩個(gè)部分mr 和 ct,不需要標(biāo)簽,因此上面的 def getitem(self, index):中不需要index這個(gè)參數(shù)了,類似地,根據(jù)需要,加入自己的參數(shù),去掉不需要的參數(shù)。

class CreateNiiDataset(Dataset):
 def __init__(self, opt, transform = None, target_transform = None):
  self.path1 = opt.dataroot # parameter passing
  self.A = 'MR' 
  self.B = 'CT'
  lines = os.listdir(os.path.join(self.path1, self.A))
  lines.sort()
  imgs = []
  for line in lines:
   imgs.append(line)
  self.imgs = imgs
  self.transform = transform
  self.target_transform = target_transform

 def crop(self, image, crop_size):
  shp = image.shape
  scl = [int((shp[0] - crop_size[0]) / 2), int((shp[1] - crop_size[1]) / 2)]
  image_crop = image[scl[0]:scl[0] + crop_size[0], scl[1]:scl[1] + crop_size[1]]
  return image_crop

 def __getitem__(self, item):
  file = self.imgs[item]
  img1 = sitk.ReadImage(os.path.join(self.path1, self.A, file))
  img2 = sitk.ReadImage(os.path.join(self.path1, self.B, file))
  data1 = sitk.GetArrayFromImage(img1)
  data2 = sitk.GetArrayFromImage(img2)

  if data1.shape[0] != 256:
   data1 = self.crop(data1, [256, 256])
   data2 = self.crop(data2, [256, 256])
  if self.transform is not None:
   data1 = self.transform(data1)
   data2 = self.transform(data2)

  if np.min(data1)<0:
   data1 = (data1 - np.min(data1))/(np.max(data1)-np.min(data1))

  if np.min(data2)<0:
   #data2 = data2 - np.min(data2)
   data2 = (data2 - np.min(data2))/(np.max(data2)-np.min(data2))

  data = {}
  data1 = data1[np.newaxis, np.newaxis, :, :]
  data1_tensor = torch.from_numpy(np.concatenate([data1,data1,data1], 1))
  data1_tensor = data1_tensor.type(torch.FloatTensor)
  data['A'] = data1_tensor # should be a tensor in Float Tensor Type

  data2 = data2[np.newaxis, np.newaxis, :, :]
  data2_tensor = torch.from_numpy(np.concatenate([data2,data2,data2], 1))
  data2_tensor = data2_tensor.type(torch.FloatTensor)
  data['B'] = data2_tensor # should be a tensor in Float Tensor Type
  data['A_paths'] = [os.path.join(self.path1, self.A, file)] # should be a list, with path inside
  data['B_paths'] = [os.path.join(self.path1, self.B, file)]
  return data

 def load_data(self):
  return self

 def __len__(self):
  return len(self.imgs)

注意:最后輸出的data是一個(gè)字典,里面有四個(gè)keys=[‘A',‘B',‘A_paths',‘B_paths'], 一定要注意數(shù)據(jù)要轉(zhuǎn)成FloatTensor。

其次是data[‘A_paths'] 接收的值是一個(gè)list,一定要加[ ] 擴(kuò)起來,要不然測試存圖的時(shí)候會有問題,找這個(gè)問題找了好久才發(fā)現(xiàn)。

然后直接在train.py的主函數(shù)里面把數(shù)據(jù)加載那行改掉就好了

data_loader = CreateNiiDataset(opt)
dataset = data_loader.load_data()

Over!

補(bǔ)充知識:nii格式圖像存為npy格式

我就廢話不多說了,大家還是直接看代碼吧!

import nibabel as nib
import os
import numpy as np
 
img_path = '/home/lei/train/img/'
seg_path = '/home/lei/train/seg/'
saveimg_path = '/home/lei/train/npy_img/'
saveseg_path = '/home/lei/train/npy_seg/'
 
img_names = os.listdir(img_path)
seg_names = os.listdir(seg_path)
 
for img_name in img_names:
 print(img_name)
 img = nib.load(img_path + img_name).get_data() #載入
 img = np.array(img)
 np.save(saveimg_path + str(img_name).split('.')[0] + '.npy', img) #保存
 
for seg_name in seg_names:
 print(seg_name)
 seg = nib.load(seg_path + seg_name).get_data()
 seg = np.array(seg)
 np.save(saveseg_path + str(seg_name).split('.')[0] + '.npy

以上這篇Pytorch 使用 nii數(shù)據(jù)做輸入數(shù)據(jù)的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python生成字符視頻的實(shí)現(xiàn)示例

    Python生成字符視頻的實(shí)現(xiàn)示例

    在之前也寫過生成字符視頻的文章,但是使用的是命令行窗口輸出,效果不是很好,而且存在卡頓的情況,所以本文介紹了mp4的字符視頻,感興趣的可以了解一下
    2021-05-05
  • Windows環(huán)境打包python工程為可執(zhí)行程序的詳細(xì)過程

    Windows環(huán)境打包python工程為可執(zhí)行程序的詳細(xì)過程

    我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個(gè)比較完整的過程,一起看看吧
    2024-01-01
  • Python批量生成特定尺寸圖片及圖畫任意文字的實(shí)例

    Python批量生成特定尺寸圖片及圖畫任意文字的實(shí)例

    今天小編就為大家分享一篇Python批量生成特定尺寸圖片及圖畫任意文字的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python+OpenCV實(shí)現(xiàn)火焰檢測

    Python+OpenCV實(shí)現(xiàn)火焰檢測

    本文主要為大家介紹了一個(gè)使用Python,OpenCV,線程,聲音和電子郵件功能的火災(zāi)探測系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-10-10
  • Python使用jsonpath-rw模塊處理Json對象操作示例

    Python使用jsonpath-rw模塊處理Json對象操作示例

    這篇文章主要介紹了Python使用jsonpath-rw模塊處理Json對象操作,結(jié)合實(shí)例形式分析了Python使用requests與response處理json的方法,并給出了jsonpath_rw模塊操作json對象的基本示例,需要的朋友可以參考下
    2018-07-07
  • 淺談Python中帶_的變量或函數(shù)命名

    淺談Python中帶_的變量或函數(shù)命名

    這篇文章主要介紹了淺談Python中帶_的變量或函數(shù)命名,簡單介紹了Python編程風(fēng)格的描述文檔,以及帶有下劃線的命名規(guī)則,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Python中處理字符串之islower()方法的使用簡介

    Python中處理字符串之islower()方法的使用簡介

    這篇文章主要介紹了Python中處理字符串之islower()方法的使用,是Python入門的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python實(shí)現(xiàn)GUI計(jì)算器(附源碼)

    Python實(shí)現(xiàn)GUI計(jì)算器(附源碼)

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語言實(shí)現(xiàn)GUI計(jì)算器,可執(zhí)行復(fù)雜運(yùn)算,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-11-11
  • pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法

    pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法

    今天小編就為大家分享一篇pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python 多個(gè)參數(shù)不為空校驗(yàn)方法

    python 多個(gè)參數(shù)不為空校驗(yàn)方法

    今天小編就為大家分享一篇python 多個(gè)參數(shù)不為空校驗(yàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評論

古蔺县| 滕州市| 星子县| 桓台县| 年辖:市辖区| 徐汇区| 遂昌县| 洛南县| 石渠县| 高安市| 理塘县| 南溪县| 普兰县| 米泉市| 天津市| 正蓝旗| 铁岭县| 饶河县| 兴城市| 遵义县| 崇仁县| 承德市| 山东| 辽宁省| 泾阳县| 重庆市| 平原县| 天长市| 茂名市| 枣庄市| 昭苏县| 淮安市| 来安县| 西昌市| 鄂伦春自治旗| 鹤峰县| 台中县| 丁青县| 恩施市| 横山县| 商水县|