1.代码(用hed中eval文件夹中matlab软件进行)
- 代码文件eval_edge.m中,内嵌了NMS处理流程,无需再查找其他代码,简单的修改即可得到评估结果
- 代码链接:https://github.com/xwjabc/hed
2.软件
- 代码语言:MATLAB 软件版本:MATLABR2021b(建议使用2016之前的版本,但是经过对代码的修改之后的版本也没什么问题)
3代码的使用
- 代码环境的配置
- 经过我对代码的修改以及他人运行验证,该代码可以完美运行。 运行评估代码需要安装pdollar
toolbox和pdollar_edges两个工具箱,在刚才下载的hed文件夹中已经包含了,即edges和toolbox.badacost.public两个文件夹,并且在eval_edge.m文件的开头位置将这两个工具箱的位置添加进了matlab系统路径。
下面是我运行成功的代码,只需将对应的检测地址更换。
**data_dir是数据文件夹
mat_dir是检测待NMS转换的mat文件夹
nms_dir是转换后文件夹
gtDir 是真实值文件夹
**
% Section 1: NMS process (formerly nms_process.m from HED repo).
disp('NMS process...')%输出字符串
data_dir = 'C:\Users\514-123\Downloads\hed-master\hed-master\eval\data';
mat_dir = fullfile(data_dir, 'mat'); %拼接文件路径
nms_dir = fullfile(data_dir, 'nms');
mkdir(nms_dir)
files = dir(mat_dir);%获得所有子文件夹和文件并返回结构体,第一行和第二行是当前目录和上一级目录
files = files(3:end,:); % It means all files except ./.. are considered.
mat_names = cell(1,size(files, 1));%size(files, 1)返回files的行数,cell(1,n)返回1*n的元胞数组
nms_names = cell(1,size(files, 1));
for i = 1:size(files, 1)
mat_names{i} = files(i).name;
nms_names{i} = [files(i).name(1:end-4), '.png']; % Output PNG files.
end
for i = 1:size(mat_names,2)
matObj = matfile(fullfile(mat_dir, mat_names{i})); % Read MAT files.
varlist = who(matObj);%将文件名称存在元胞数组varlist中
x = matObj.(char(varlist));
if iscell(x)
x=x{1}
x = x.Boundaries; % 提取 'Boundaries' 字段的数值矩阵
end
E=convTri(single(x),1);
[Ox,Oy]=gradient2(convTri(E,4));
[Oxx,~]=gradient2(Ox); [Oxy,Oyy]=gradient2(Oy);
O=mod(atan(Oyy.*sign(-Oxy)./(Oxx+1e-5)),pi);
E=edgesNmsMex(E,O,1,5,1.01,4);
imwrite(uint8(E*255),fullfile(nms_dir, nms_names{i}))
end
% Section 2: Evaluate the edges (formerly EvalEdge.m from HED repo).
disp('Evaluate the edges...');
gtDir = 'C:\Users\514-123\Downloads\hed-master\hed-master\eval\data\test';
resDir = fullfile(data_dir, 'nms');
edgesEvalDir('resDir',resDir,'gtDir',gtDir, 'thin', 0, 'pDistr',{{'type','parfor'}},'maxDist',0.0075);
figure; edgesEvalPlot(resDir,'HED');
2万+

被折叠的 条评论
为什么被折叠?



