BSE---The Berkeley Segmentation Engine (BSE)

这是一个UCB做分割做的结果比较早、比较好的分割方法,其工程网站为:
上面有代码及一些简单的介绍,此代码基于以下三篇文章:
(1): C. Fowlkes, J. Malik. "How Much Does Globalization Help Segmentation?", Technical Report CSD-04-1340, Division of Computer Science, University of California, Berkeley, (July 2004).
(2): C. Fowlkes, D. Martin, J. Malik. "Learning Affinity Functions for Image Segmentation: Combining Patch-based and Gradient-based Approaches", CVPR 2003
(3): D. Martin, C. Fowlkes, J. Malik. "Learning to Detect Natural Image Boundaries Using Local Brightness, Color and Texture Cues",TPAMI 2004

作者公布的代码是linux版本的,也附有MAC OS的编译说明。我在ubuntu 12.04 64 bit下编译成功,目录如下:
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
 
按照作者公布的README文件的使用说明:
./pixelfeatures -image test.jpg -pbfile test.pb
进行边缘检测,速度相当慢(本人机器,i7-3930k,3.2GHZ×12,16 GB memory),刚开始还以为是机器挂了,以下是操作示例:
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
 可以看出,计算效率确实比较低(图片尺寸为:504*843),在同级目录下生成一文件:text.pb,即边缘文件,利用同目录下matlab/read_array.m进行读取
 >> A = imread('../test.jpg');   B = read_array('test.pb');
>> figure;imshow(A);    figure;imshow(B,[])
结果如下:
 BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
  可以看出,除了效率比较低之外,计算结果还是挺不错的。

注:貌似作者的代码输出有些问题:第一个CG computation,是否应该为BG computation,因为是在进行brightness gradient computation,有待对代码进行剖析。
原作写于:2014年1月4日

修改:2014年1月6日
今天在Win 7 64 bit下用cygwin(cygwin64 terminal)对BSE进行编译,不需要进行fortran90啥的配置,应该是cygwin默认都搞进去了。
cygwin64 terminal下,进入到BSE的目录,然后执行:
ln -s Makefile.gcc Makefile,将Makefile.gcc软链接为Makefile
然后再make,即开始编译。此时,会出现一系列的错误:
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought 
大意是values.h未定义,这应该是linux下自带的,将这一行注释掉,发现出现另一个FLT_MAX未定义的错误:
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
 因此可以看出values.h只是提供了对FLT_MAX的定义,google之,发现只是一个float类型的最大值的定义,在win下,可以用float.h代替values.h。将所有出现$include< values.h>的地方均替换成:#include <float.h>,再次进行编译,即可成功。
同linux下一样进行运行测试:
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
 这里我用的测试图片大小为:384 * 512,速度还是比较慢。
同样,还是用matlab进行算法结果的显示比较:
 >> A = imread('../test.jpg');   B = read_array('test.pb');
>> figure;imshow(A);    figure;imshow(B,[])
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
 结果的精确性,还是挺令人满意的。
./segment -image dog.jpg -segfile dog.seg -numsuperpixels 15
输出为dog.seg,用read_array_int(位于同级matlab目录下)进行读取并显示:
BSE---The Berkeley Segmentation Engine (BSE) - Free thought - Free Thought
 注:由cygwin编译出来的exe,在cygwin命令行窗口里面是可以直接运行的,不会发生缺少文件的情况。但是在windows的命令行窗口中运行时,会发生缺少各种dll的问题。这些dll,可以在cygwin安装目录的bin目录下寻找(如果没有,只能google之了),对应于BSE,缺少的几个dll是:
cygjpeg-8.dll
cyggcc_s-seh-1.dll
cygstdc++-6.dll
cygwin1.dll
posted @ 2014-09-28 23:45  DeepVL  阅读(444)  评论(0编辑  收藏  举报