对于小数据量医学图像进行深度学习使,会由于数据量过小而过拟合。因此我们需要采用数据扩充方法,而flip和rotate又是经常用到的,这里做一个简单的实现。

输入为[batchsize,height, width, channel]。这里是2D医学图像数据增强,我之前应该有写到3D增强,不过2D稍加改动也就可以用于3D。

  1. def random_rotate_brain(image, label):
  2. bs = image.shape[0] - 1
  3. angle = np.random.randint(-20, 20) # 设置旋转角度
  4. # print("image:{},label:{}".format(image.shape, label.shape))
  5. channel = [ndimage.rotate(image[bs,:,:, c], angle, order=0, reshape=False) for c in range(image.shape[3])] # 每个通道都做相同的旋转
  6. image[bs,...] = np.stack(channel, axis=-1)
  7. chlabel = [ndimage.rotate(label[bs,:,:, c], angle, order=0, reshape=False) for c in range(label.shape[3])] # 如果你不想你预测的结果和标签对不上,标签也要进行同样的旋转
  8. label[bs, ...] = np.stack(chlabel, axis=-1)
  9. return image, label
  10. def random_rot_flip_brain(image, label):
  11. axes = (1,2) # 由于我们需要对height和width做扩充,所以取1,2。如果你输入矩阵第一维就是height和width,那你就需要改动为(0,1)
  12. k = np.random.randint(0, 4)
  13. image = np.rot90(image, k, axes)
  14. label = np.rot90(label, k, axes)
  15. # print("k:{},img:{},lab:{}".format(k, image.shape,label.shape))
  16. axis = np.random.randint(1, 3) # 同上,只需对1,2维做扩充
  17. image = np.flip(image, axis=axis).copy()
  18. label = np.flip(label, axis=axis).copy()
  19. return image, label
  20.  
  21. def RandomGenerator_brain(x, y):
  22. image, label =x, y
  23.      # 不可能全部图像都要做数据扩充吧,设置一个随机数
  24. if random.random() > 0.5:
  25. image, label = random_rot_flip_brain(image, label)
  26. elif random.random() > 0.5:
  27. image, label = random_rotate_brain(image, label)
  28.  
  29. return image, label

三维医学图像数据扩充:flip and rotate的更多相关文章

  1. 常见的数据扩充(data augmentation)方法

    G~L~M~R~S 一.data augmentation 常见的数据扩充(data augmentation)方法:文中图片均来自吴恩达教授的deeplearning.ai课程 1.Mirrorin ...

  2. ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充

    开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...

  3. i3s 一种开源的三维地理数据规范 简单解读

    i3s,esri主推到ogc的一种三维开源GIS数据标准. 版权声明:原创.博客园/B站/小专栏/知乎/CSDN @秋意正寒 转载请标注原地址并声明转载: https://www.cnblogs.co ...

  4. 【48】数据扩充(Data augmentation)

    数据扩充(Data augmentation) 大部分的计算机视觉任务使用很多的数据,所以数据扩充是经常使用的一种技巧来提高计算机视觉系统的表现.我认为计算机视觉是一个相当复杂的工作,你需要输入图像的 ...

  5. 医学图像数据(一)——TCIA基本介绍

    1.介绍 The Cancer Imaging Archive (TCIA)是癌症研究的医学图像的开放获取数据库.该网站由国家癌症研究所(NCI)癌症影像计划资助,合同由阿肯色大学医学科学院管理.存档 ...

  6. Matlab如何令三维抽象数据可视化的显示出来

    Mathworks File Exchange频道近期更新了一个小函数.能够将三维数据矩阵相应的函数u=f(x,y,z)可视化的显示出来. 对我们这些常和数据分析问题打交道的人爱说.还是有点參考价值的 ...

  7. Cesium加载三维倾斜摄影数据

    具体技术来源自论文 基于Cesium的倾斜摄影三维模型Web加载与应用研究. 技术架构图 应用实例 利用一个实际实例来详细说明如何利用Cesium加载倾斜摄影数据,并进行可视化和交互操作. 首先,利用 ...

  8. 医学图像数据(三)——TCIA部分数据下载方式

    前为止,本人还没有找到不需要账号的就可以部分下载的方式,因此这里讲的是需要注册账号下载部分数据的方法. 注意:下载部分数据需要注册账号 注册账号网址:https://public.cancerimag ...

  9. 医学图像数据(二)——TCIA完整数据集下载方式

    1. 构建下载环境 l  TCIA数据集下载文件为.jnlp格式(JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序 ...

  10. Keras Data augmentation(数据扩充)

    在深度学习中,我们经常需要用到一些技巧(比如将图片进行旋转,翻转等)来进行data augmentation, 来减少过拟合. 在本文中,我们将主要介绍如何用深度学习框架keras来自动的进行data ...

随机推荐

  1. (2024最新)有效解决OpenAI Chatgpt Plus升级报错【您的银行卡被拒绝了/your card has been declined」,不用再问怎么办?

    在OpenAI升级ChatGPT plus时我们可能会遇到升级报错[您的银行卡被拒绝了/your card has been declined」,有些人看到这个可能就会不知所措 注意,这个问题目前依旧 ...

  2. 【Mybatis-Plus】使用QueryWrapper作为自定义SQL的条件参数

    发现同事的自定义SQL写法是这样的 连表之后使用的条件是 ${ew.customSqlSegment} @Param声明的常量: /** * wrapper 类 */ String WRAPPER = ...

  3. 【Linux】Re04

    一.文件所有者 [root@localhost ~]# ls -ahl 总用量 40K dr-xr-x---. 3 root root 187 11月 29 19:20 . dr-xr-xr-x. 1 ...

  4. 局域网环境下,如何在Ubuntu中发现Windows10下的共享文件夹

    参考: https://blog.csdn.net/rangfei/article/details/124225799 ======================================== ...

  5. 循环Map的几种方法

    package cn.jdbc.test;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import ...

  6. DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024

    论文分析了现有的新类别发现和定位(NCDL)方法并确定了核心问题:目标检测器往往偏向已知的目标,忽略未知的目标.为了解决这个问题,论文提出了去偏差区域挖掘(DRM)方法,以互补的方式结合类无关RPN和 ...

  7. You are currently using minified code outside of NODE_ENV === 'production'. This means that you are running a slower development build of Redux.

    You are currently using minified code outside of NODE_ENV === 'production'. This means that you are ...

  8. 基于gitee+hexo搭建个人博客

    gitee准备 注册好gitee git安装与配置 下载git默认安装,配置 在之前下载的目录下,右键,选择[Git Bash Here] 配置用户 git config --global user. ...

  9. esphome-esp8266

    esp8266使用esphome接入hass 对于生成配置文件的更改 此处nodemcu泛指集成的开发板,一般十几块钱一块 下方使用的是D1,对应的针脚是GPIO5 esp8266: board: n ...

  10. 【Appium】之自动化定位总结

    一.同级定位时,先定位上级 我想定位[必填]框,我先定位[姓名]的同一个上级 self.driver.find_element(MobileBy.XPATH,"//*[contains(@t ...