DDSM数据库是美国的医学机构所建立的专门存放乳腺癌图像的数据库。里面存放了cancer,normal,benign,benign_without_callback四类数据。目前很多对乳腺癌的研究都是根据该数据库进行研究。接下来本文将会针对DDSM数据库的下载,格式转化方面展开介绍。

1.下载数据

我们的下载工具是winscp软件,该软件可以用于远程ftp下载。

首先,在网上搜索安装包进行下载安装。

安装之后,打开软件。

选择ftp,输入DDSM网址,匿名登录。

等待连接以后,就可以看到我们需要下载的资源,然后选择我们需要下载的资源,点击下载即可。

##2.转换格式##
为了满足不同用户的需求,老卫对其格式的转化研究了整整一周,目前已经掌握将ljpeg格式转化成jpg和png格式。接下来将两个转化方法都分享出来。

2.1 LJPEG转化成JPG###

LJPEG转化为JPG格式,可以满足我们的一般需求。首先需要将以下代码download下来,并且放置与DDSM数据同级目录。

我的文件树如下:

进入jpegdir目录下,编译。(可以先make clean之后再进行编译)

cd jpegdir
make

紧接着打开covert.py文件,该文件就是用于将目标文件转化为jpg格式。将代码中path_to_ddsm参数换成自己的目标文件夹,注意最后要以每个case为最小单位文件夹。

然后运行该脚本。

python convert.py

成功将图片格式转化为jpg格式。

2.2 LJPEG转化成PNG###

####2.2.1 转化格式
上面介绍了将LJPEG格式转化成jpg格式,但是jpg格式是有压缩的,所以存在一定的信息损失,那么最好的图片格式就是png格式,它是一种无损的图片格式,可以更好的将信息保留下来,接下来老卫将会针对如何将LJPEG格式转化为PNG格式展开研究。

首先加入了自动化运行脚本,使得每次只需要更改文件路径就可以自动运行脚本。

代码链接如下:

将代码放入与DDSM数据同级目录上。
另外imagemagick是需要的,我们需要用它将pnm转化为png格式。
另外得到代码以后,进入ljpeg目录中的ljpegdir,进行编译。

cd ljpeg/jpegdir
make

紧接着进入ddsm下的ddsm-software,将该文件进行编译。

cd ddsm/ddsm-software
g++ -Wall -O2 ddsmraw2pnm.c -o ddsmraw2pnm

我的DDSM_Dataset放的是DDSM数据,和它同级的ljpeg-to-png就是我们代码的目录。

里面有一个ddsm_ljpeg.sh脚本就是对于目标文件夹下的LJPEG文件,转化成PNG格式,但是每次必须以case为单位运行程序。所以我在此基础上加入了automation_script.py脚本,用于自动化运行程序。打开automation_script.py,将path,directory变量变为本地的实际参数。具体细节可以查看代码与注释。运行该程序,就可以成功转化文件格式。

注意:在转化过程中如果有报一些错误,但是依旧可以将图片格式进行转化,那么就不必担心,那是因为你的其他文件路径和我们不同的原因。但这并不影响图片格式的转化。

在中间如果遇到了使用脚本对normal下的病例进行转化,转化失败,那么查看一下,对应case文件夹下的.ics文件里的内容。

老卫一开始的ics里的内容如下:

注意里面的SEQUENCE放在了DATE_DIGITIZED后面,这种的格式是错误的,我们的脚本就无法读出后面的数据,从而转化失败。正确的做法是将SEQUENCE放在DIGITIZED的下面,如图:

修改了.ics文件之后,紧接着重新运行脚本,转化成功。

####2.2.2自动化删除中间遗留的.1与.pnm文件
在我们程序运行中,会产生大量的中间文件,.1文件与.pnm文件。于是老卫又写了一个clean.sh脚本用于自动化删除目标文件夹下的这两类文件。

可以从下图看到,存在大量的中间文件。导致一个文件夹高达50个G。

将clean.sh放到与目标文件夹同级目录。如下:

然后打开终端,运行脚本。

./clean.sh

可以看到大量的中间文件被删除。

清除干净的文件夹立马变小了,节约了空间资源。

####2.2.3自动化更改png图片名称
在我们将图片格式转化为PNG格式之后,存在一个问题,那就是PNG图片的名字异常的复杂,那是因为中间处理所产生的问题,但是我们必须要将图片的名称更改为正常的名称,因为我们后续的操作,比如与overlay文件结合,必须使用正确的名称。

于是老卫就写了一个rename_pngfile.py脚本文件,用于更改目标文件夹下的png文件的名称。遍历文件夹下的文件,判断是否是png文件,如果是,则更改为正确的名字。

可是这样每次需要手动更改目标文件,太过劳累,于是老卫写了一个自动化更改名称的auto_rename_pngfile.py脚本,用于自动化寻找目录,运行脚本,更改名称。同样的每次修改path,directory的参数。

运行该脚本,之后,图片名称更改为我们所需要的正确名称。

####2.2.4读取overlay掩码文件
在我们的cancer病例与benign病例中会存在专业医师标注的病灶区域,他们将病灶区域的信息存放至overlay文件中。我们需要通过一定的程序将该overlay信息读取出来。

打开DDSMUtility-master文件夹中的openDDSMPngWithOverlay.m文件,然后修改以下参数变量为自己存放png图片与overlay文件的文件夹。

% Needed to load PNG files
directoryOfDDSMPNG = 'E:\swap\';% Needed to load OVERLAY FIles
directoryOfDDSM = 'E:\swap\';
imageOutputFileFormat = '*.png'; % Notice the STAR dot. Can be *.tif, *.jpg...

运行程序就可以看到医师所标注的病灶区域。如图:

但是我们在做目标检测的时候是需要边框数据的,所以我们需要将其不规则的病灶区域转化为边框区域,这里推荐一款脚本,labelimg,可以从github上download下来。

具体安装步骤和使用方法非常简单,读者可以自行查看。
如图:

这样就会将其边框信息保存下来,供我们后期使用。

至此完成了将LJPEG转化为PNG的研究。

By:老卫
Email:2205492446@qq.com
欢迎联系,互相交流!

老卫带你学---DDSM乳腺癌数据研究相关推荐

  1. 老卫带你学---动态语言和静态语言的区别

    老卫带你学-动态语言和静态语言的区别 1.基本概念 静态语言(强类型语言) 静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型. 例如:C++.Java ...

  2. 老卫带你学---sklearn实现留一法与自助法(booststrapping)

    一.介绍 1.留一法 留一法(Leave-One-Out)是S折交叉验证的一种特殊情况,当S=N时交叉验证便是留一法,其中N为数据集的大小.该方法往往比较准确,但是计算量太大,比如数据集有10万个样本 ...

  3. 老卫带你学---C++中map与pair的区别

    1.pair的类型:pair是一种模版类型.每个pair 可以存储两个值.这两种值的类型没有限制,也可以将自己写的类放进去. 2.pair 应用:如果一个函数有两个返回值的话,如果是相同类型,就可以用 ...

  4. 老卫带你学---使用cv2.imwrite保存的图像是全黑的

    在使用opencv的cv.imwrite函数进行图像保存的时候,发现保存下来的图像都是全黑 cv.imwrite("gamma_enhance.jpg",out) 因为image是 ...

  5. 老卫带你学---CMake Error: CMake was unable to find a build program corresponding to MinGW Makefiles. CM

    CMake编译OpenCV3.1.0过程中一直出错: CMake Error: CMake was unable to find a build program corresponding to &q ...

  6. 老卫带你学---RMSProp与Adam

    RMSProp算法 RMSProp算法全称root mean square prop算法. 从前面的例子可以知道,当我们利用梯度下降法的时候,虽然横轴也在前进,但纵轴摆动太大.假设纵轴是b横轴是w,假 ...

  7. 老卫带你学---WLD韦伯局部描述符

    WLD韦伯局部描述符也是一种可以衡量图像纹理信息的特征. 在大多的据不描述符中,Gabor小波和LBP是常见的两种.本文将主要介绍另外一种纹理的描述算子WLD(Weber's Local Descri ...

  8. 老卫带你学---CSS 渐变色 (超好看)

    分享两个个人感觉超级好看的渐变色: .rainbow {width: 200px;height: 50px;background-image: linear-gradient(to right, #f ...

  9. 老卫带你学---全网最强python实现三维散点图(散点,连线,光滑)

    最近在实现三维散点图的画图任务.话不多说,直接上图: 我们采用的环境是: matplotlib+numpy(1.16.1)+scipy 代码如下: #-*-coding:utf-8-*- import ...

最新文章

  1. 为什么vs数据库中文显示问号_本科论文知网不收录为什么会被知网查重到?
  2. 入行时间序列预测必读的4篇论文(附代码)
  3. 图书管理系统python代码课程设计报告_数据结构图书管理系统课程设计报告
  4. c语言双引号和单引号的区别_Python中的单引号和双引号有什么区别?
  5. 如何在业务层实现响应缓存
  6. POJ2503 Babelfish map或者hash_map
  7. 《走进SAP(第2版)》——2.8 SAP的目标是什么
  8. eclipse快速定位到错误处
  9. 1064金明的预算方案
  10. UI基础设计规范,确定不了解一下?
  11. python continue和break同时用_Python学习笔记之Break和Continue用法分析
  12. 关于 JVM 内存的 N 个问题(转)
  13. laravel手册链接
  14. android 时间水印相机,水印相机时间打卡
  15. matlab韦伯分布,科学网—威布尔分布 Weibull Distribution 资源网页搜集 - 杨正瓴的博文...
  16. unity导入模型昏暗(对比度低)解决办法
  17. 利用Windows系统自带命令手工搞定病毒
  18. Zynq实现分布式Fir滤波器
  19. 通过URL传参(参数也是URL)
  20. 使用jasypt加密配置的时候,报错:DecryptionException: Unable to decrypt

热门文章

  1. QQ邮箱导出的通讯录出现乱码怎么办?
  2. jsp:include和%@include file=%有什么区别
  3. SumToken钱包怎么样_SUMTOKEN钱包靠谱吗
  4. 【学习笔记】彻底删除2345输入法
  5. 防抖(debounce) 和 节流(throttling)的封装使用-最终发布npm
  6. 脊髓炎起病急 该做好哪些治疗呢?
  7. 【华为OD机试真题 python】连续出牌数量【2022 Q4 | 200分】
  8. abb机器人常见维故障现象
  9. 谈微信里的“养生“谣言
  10. mac装node_Mac环境下node安装与卸载方法