转自:https://blog.csdn.net/u014722627/article/details/60140789
这两个是berkely (伯克利大学)computer vision group提供的数据集,用来做segmentation(图像分割)或contour detection(轮廓检测)的,还有人拿这个做super resolution(超分重建)的
BSDS500:
数据库包含200张训练图,200张侧视图,100张检验图。ground truth是人工标识的,已数据库图片id为单位,保存成mat格式文件,一个文件包含多个标记者的标记信息。有轮廓和分割信息,用matlab读取很方便,直接load就行。
- 原资源页面链接
这个页面还包括了globalPb算法的源码,release版本(linux平台) - 数据库下载链接
其实是上面那个页面里面的,直接下载点这里 - 百度云数据库下载链接
原链接实在是不好下载,我就提供一下百度云版本吧,包含我处理过后的ground truth,可视化了一下。
链接:://zhuanlan.zhihu.com/p/662344245
链接:https://pan.baidu.com/s/1ywN-0N7KbCbpWTz-3ICzcA?pwd=3sl6
提取码:3sl6
BSDS300:
BSD500其实是BSD300的扩展版本。BSD300有200张训练图,100张测试图,ground truth分为color和gray两个文件夹,这两个文件夹里面又有以标记者id(uid)命名的子文件夹,里面是每个标记者提供的分割信息,以图片id命名,保存为.seg文件。
- 原链接资源页面
页面还包含了读取seg文件的matlab脚本,有了脚本处理起来也很方便:脚本下载页面 - 百度云数据库下载链接
同上,因为不好下载嘛
BSDS500处理脚本:
生成轮廓可视化图:
% make_gt_bondary_image.m
% bsdsRoot 需包含train、test 两个文件夹,生成的结果也放在这两个文件夹的bon子文件夹里
state = 'test';%修改为test或train,分别处理两个文件夹
file_list = dir(fullfile(bsdsRoot,state,'*.mat'));%获取该文件夹中所有jpg格式的图像
for i=1:length(file_list)
mat = load(file_list(i).name);
[~,image_name,~] = fileparts(file_list(i).name);
gt = mat.groundTruth;
for gtid=1:length(gt)
bmap = gt{gtid}.Boundaries;
if gtid==1
image = bmap;
else
image(bmap==true)=true;
end
end
%黑底白边
imwrite(double(image),fullfile(bsdsRoot,'bon',state,[image_name '.jpg']));
%白底黑边
%imwrite(1-double(image),fullfile(bsdsRoot,state,'bon',[image_name '.jpg']));
end
生成分块可视化图:
% make_gt_seg_image.m
% bsdsRoot 需包含train、test 两个文件夹,生成的结果也放在这两个文件夹的seg子文件夹里
state = 'train';
file_list = dir(fullfile(bsdsRoot,state,'*.mat'));%获取该文件夹中所有jpg格式的图像
for i=1:length(file_list)
mat = load(file_list(i).name);
[~,image_name,~] = fileparts(file_list(i).name);
gt = mat.groundTruth;
for gtid=1:length(gt)
seg = double(gt{gtid}.Segmentation);
seg = seg/max(max(seg));
if gtid == 1
image = seg;
else
image = image+seg;
end
end
image = image/length(gt);
imwrite(double(image),fullfile(bsdsRoot,state,'seg',[image_name '.jpg']));
end
BSDS300处理脚本:
记得先下载官方提供的处理脚本~
%make_gt_image.m
%bsdsRoot包含human文件夹
state = 'train';
present = 'color';
list = imgList(state);
for iid=1:length(list)
[segs,uids] = readSegs(present,list(iid));
for seg=1:length(segs)
bmap = seg2bmap(segs{seg});
if seg==1
image = bmap;
else
image(bmap==true)=true;
end
end
imwrite(double(image),fullfile(bsdsRoot,'human',present,state,[num2str(list(iid)) '.jpg']));
end
- 效果如下
我把单张图片所有用户的提供的轮廓信息叠加了,分割信息求了平均,当然你也可以选择其他处理方式