Scilab工具箱的初步开发和使用

时间:2021-10-16 13:00:13
   题】: Scilab 工具箱的初步开发和使用
【关键字】: Scilab

Scilab
工具箱的初步开发和使用
大家一般都是比较熟悉 Matlab ,但是有些时候下必须使用其它的软件
比如,如果没有授权的 Matlab,VC ,与一些同行交流时
而且,我们越来越依赖于几个商业软件了
长此以往,我们就被套在 Matlab 上了
好在开源人士和一些开明的团体
提供了一些别的选择,
GNU
Octave, 语法和 Matlab 差不多,不过工具箱很少,开发也不是很活跃
感觉上 GNU 不能在方方面面都做到最好
法国国立自动化研究所开发了 Scilab ,它的应用越来越广了
尤其在中科院自动化所的中法联合实验室的推广下

Scilab
的工具箱有一些,但是还是太少
比较实用的有图像处理工具箱 SIP ,是由巴西人写的
包含了一个很有用的工具集
中科院的几个研究生也写了一个视频和图像处理的工具箱
不过,他们用到了 Intel opencv ,这在 FreeBSD 下是没有的
因此对 BSD 一族真是扼腕痛惜的事

前几天装了一下 SIP delphij 建议写个 port
目前太懒,正在做一个图像处理的项目,完了之后估计会写吧

首先要下在 ANIMAL 最新的版本 ,configure 没问题  
make
,src 目录下的大部分 C 文件都要注释掉 #include <malloc.h> 这一句  
祥见 scilab port  Makefile ,里面又一个替换的语句,就是针对这个情况
make install
就把库文件和一些头文件放到 /usr/local/lib/animal  
/usr/local/include/animal
里去了  

然后下载 Scilab Image Processing Toolbox 4.0rc-1 
make
,src 里的 sip_config.h 有一行  UndefinedCompressQuality, 两头加上引号 "" 
unwrap_***.c
那个文件有一个变量 s, 前面的声明多打了一个字符
ulong s=0 改为 long s=0 
然后 make OK 
make install 
安装到 /usr/local/lib/scilab/contrib/sip 里面  

起动 scilab 
exec "/usr/local/lib/scilab/contrib/sip/loader.sce" 
就起动了 SIP

新的 SIP 里有 rgb2hsv 之类的函数,有 hough 变换、 Radon 变换
真是解了我燃眉之急

在没有 Matlab 的日子里真是痛苦啊,不过一点点会过去的

最近的项目要用 wavelet
找遍了 Internet ,免费的 wavelet C 代码真是很少
做这些研究的都是只对他们的研究项目感兴趣,不想把工具箱做完善,
其实这也没什么可抱怨的,人家为什么要为你服务呢

最后发现了 GNU Scientific Library 里有 wavelet 的库
虽然也不完善,但是总比没有好


我就打算写一个接口程序,在 Scilab 里调用 GSL 的库

开始写 C 接口程序
第一个难题,写 Perl 写多了
感觉 C 约束太多
独立的写了一个程序, C 调用没问题
但是在 scilab 里一调用就退出
scilab
里如何能 gdb 呀?: -

于是就写 printf 给控制台发消息吧
发现传给 C 的字符参数有问题
原来是传双精度数据用 stk ,字符用 cstk
我都用了 stk ,还有,没有指定输出变量的存储开的大小

大致格式是

intgsldwt(char *fname)
{
检查输入变量,输出变量的个数
输入输入变量,检查维数
创建输出变量,给出维数,内存开多大

调用 C 程序  gsldwt();

}

gsldwt()
{
数学运算
}

/usr/local/lib/scilab/examples/interface-tutorial-so
里拷一个 builder.sce 到当前目录
改为自己要连接的库
启动 scilab
执行 builder.sce
loader.sce
然后就可以用了
大致步骤是这样,具体还要调整

SIP
是用的 intersci 的接口
要把 C 转成 Fortran
因为 Scilab 低层是 Fortran 的,
以后也徐会写一个 intersci 的接口吧

现在麻烦点,总比以后被 matlab 卡了脖子要好啊