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
欢迎联系,互相交流!

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信