该程序是Orlando发表的论文中实现的血管分割的程序。使用该程序要引用原文哦。
Orlando, J.I., Prokofyeva, E. , Blaschko, M.B.: A discriminatively trained fully connected conditional random field model for blood vessel segmentation in fundus images. Biomedical Engineering, IEEE Transactions on (2016)
Orlando, J.I. , Blaschko, M.B.: Learning fully-connected CRFs for blood vessel segmentation in retinal images. In: MICCAI. (2014) 634–641
源代码在GitHub上下载。
我电脑上安装的是MATLAB2019a,程序包中有一个库在2019版本中更改了,所以执行时出错,在文章后面介绍。
我修改后的程序包下载地址:https://download.youkuaiyun.com/download/icecreamdinner/19662236
基础修改
程序包中有“user_manual.pdf”文档,先按照该文档的操作步骤建立文件夹、更改路径等操作。
1. 设置一个输入文件夹“img_input”,在该文件夹下建立DRIVE数据集文件夹,具体路径如下图所示:
2. 设置一个输出文件夹“img_store”;
3. 打开“script_experiments_massive.m”文件,
增加添加路径的语句,例如:“addpath('./Configuration');”把所有程序包的文件夹路径都添加到搜索路径中去;
变量datasetsNames是输入文件夹下数据集的名字,我只测试了DRIVE数据集,所以将其他数据集注释,只保留DRIVE数据集;
指定输入、输出文件夹路径:注意“\”符号
rootDatasets = 'E:\DR\06-Vessels\img_input\'; %输入文件夹路径
rootResults = 'E:\DR\06-Vessels\img_store'; %输出文件夹路径
4. 打开程序包中Configuration文件夹下的“getConfiguration_GenericDataset.m”文件,该文件是配置config变量的重要文件,模型的相关参数设置可以在此文件中修改。首先需要指定训练集路径:
config.scale_factor = estimateScaleFactor('E:\DR\06-Vessels\img_input\DRIVE\training', config.training_data_path);
出错
1.
在“get_lineresponse.m”文件中,把W改成3了。W表示窗的大小,本来是自动生成的,这里手动设置为3了。
2.
出现NaN和Inf是由于config结构体变量中有些数据生成错误了,主要是在修改路径时出现错误,系统没有找到相关数据的存储位置,仔细检查自己的路径是否正确。
3.
这是在使用支持向量机进行二次规划时,调用了quadprog.m函数文件时出现错误,原因是该程序包调用的quadprog.m文件与matlab2019a中的quadprog函数文件不同,需要更改部分语句。
在bundler函数中修改
state.quadProgOpts = optimset('Algorithm', 'interior-point-convex', 'Display', 'off', 'MaxIter', 1000);
% state.quadProgOpts = optimset('Algorithm', 'active-set', 'Display', 'off', 'MaxIter', 1000);
把下面语句改成上面的,因为2011之后的优化函数不支持active-set了。
具体参考以下网址:https://blog.youkuaiyun.com/qq_42165292/article/details/104802779
4.
我在程序包中没有找到SaveSegmentations函数,不知道放哪了,不过这个函数就是存储了分割好的血管图、config文件、模型、存储位置这些信息,使用save函数存储为mat文件也可以,
save('vessel_segment.mat','root','config', 'results', 'model') ;