def load_nii_file(self, path): img = self.__read_nii_file(path) #读取3D源文件 # img = self.__cut_nii_file(img)#去除文件周围无意义的区域 3D去黑边 #缩放到目标大小 最近邻插值 if len(self.target_size) == 2: # temp_targer_size = self.target_size[:]+[self.target_size[-1]] temp_targer_size = self.target_size[:] + [155] else: temp_targer_size = self.target_size[:] # ratio = [temp_targer_size[x]/img.shape[x] for x in range(3)] # resize_image = ndimage.interpolation.zoom(img,ratio, mode='nearest') # assert resize_image.shape==tuple(temp_targer_size) # resize_image[resize_image<0]=0#去除插值后出现的负像素 resize_image = CutPadding.center_crop_3D(img=img, target_size=temp_targer_size) if self.dims == 3: resize_image = resize_image elif self.dims == 2: resize_image = resize_image[:, :, temp_targer_size[-1] // 2] else: raise ValueError img_norm = self.__normalize(resize_image, dtype=np.float32) #归一化 img_saved = self.__save_nii2npy(img_norm, path) #保存 并且返回保存的文件 将对2D 3D区别对待 return img_saved
def __read_nii_file(self,path): temp_path = path[:-3]+"npy" if os.path.exists(temp_path)==True: if self.update==False: self.get_saved = True return np.load(temp_path) img = nib.load(path) img = np.array(img.dataobj[:,:,:]) # print("*****") # print(img.shape,img.dtype) # print(img.min(),img.max()) # print("*****") img = CutPadding.cut_img_3D(img) # print("*****") # print(img.shape,img.dtype) # print(img.min(),img.max()) # print("*****") return img
def __cut_nii_file(self, img): return CutPadding.cut_img_3D(img)