这位童鞋是做图像处理的吧,我试着看了一下,也下载试了一下,出错的原因在于:vl_slic.m文件是一个脚本文件(错误提示里的SCRIPT),而你的语句里调用的是一个带参数的函数文件(vl_slic(im, 20, 0.1, 'verbose')),MATLAB里的函数文件都是以function开头的,解决的方法是有的,我在vl_slic.m文件所在的文件夹中看到了一个同名的C源文件vl_slic.c,且该文件是一个以MEX文件规范编写的函数文件,因此可以通过MATLAB的MEX命令将C文件编译为MEX文件,而在MATLAB中MEX文件的优先级总是高于M文件,若存在同名MEX和M文件则忽略M文件,而优先调用MEX文件,本来想要直接通过C文件编译MEX文件还要颇费一番功夫,要配置C编译器、添加搜索路径等,一两句话说不完,不过该程序的制作者用心良苦,已经预先帮你考虑到了。
在所有文件的根目录下面(和 ICCV2013平级)有一个readme.md的文本文件,用记事本打开它,里面说的很清楚了:
- Mex all c++ files in the following folers (For windows):
(a) run "Agglo_MS_compile.m" in the folder "./ClusteringUtil";
(b) run "compile_edison_wrapper.m" in the folder "./edison_matlab_interface";
(c) run "libsvm_compile.m" in the folder "./libsvm";
(d) compile 钬榗d GraphSegment; mex mexSegment.cpp钬?
需要编译所有C++源文件,在Windows平台下,需要依次:运行./ClusteringUtil目录下的Agglo_MS_compile→运行./edison_matlab_interface目录下的compile_edison_wrapper→运行./libsvm目录下的libsvm_compile→编译\GraphSegment目录下的mexSegment.cpp(注意:编译方法为:打开\GraphSegment目录,运行如下matlab命令行语句:mex mexSegment.cpp)。
然后再运行示例文件,如:ExtractMeanShiftSegmentationMask或ExtractSlicSegmentationMask就不会出错了。
补充:如果以前没有用过MEX命令,MATLAB可能(注意:是可能)会提示没有配置MEX编译器,检查的方法是在MATLAB命令行下输入命令:mex.getCompilerConfigurations,如果不为空,则已经配置了C编译器,否则,需要手动配置C编译器,配置方法为:在命令行输入mex -setup,提示是否定位本机上安装的C编译器,选择y,弹出所有安装的、并可被MATLAB兼容的C编译器,选择一项(序号),按着提示进行,一般而言,MATLAB都自带一个C语言编译器LCC,如果没有其它更好的编译器(如VC)可以将就用下,不过LCC只能编译C语言兼容规范的源文件,如果CPP文件中含有C++特有的语法可能还是无法编译,此时必须先安装C++语言编译器,方法是:在mex -setup后选择n,则MATALB列出所有与当前MATLAB版本兼容的C编译器,一般你可以从中选一个较新的VS版本,从网上下一个该版本的VS,装上,然后再次配置MEX的默认编译器,再次进行CPP文件编译即可。