引子
很多人在做研究时,采用了MATLAB作为主要工具,主要原因,大致是基础模块多,计算结果易于用多种可视化方式展现,如波形曲线,动画,视频,图像,声音播放等等,都能在MATLAB中轻易实现。这对于算法的验证很有帮助。然而,MATLAB距离工程实现比较遥远,真正工程实现的算法往往都是在C/C++/JAVA语言级别上完成的。应当承认,MATLAB在数据的输入输出接口处理上做了大量的工作,研究者可以不在乎音视频文件的各种格式,轻松读写,以矩阵作为数据处理对象,直入算法核心。加之以很多经典的算法包,更使之如虎添翼。成为MATLAB最大的买点。
离开MATLAB,我们真的就寸步难行吗?特别是在可视化工作和数据接口工作上,我们真的没有出路吗?
其实,在国外,MATLAB并非唯一,或最广泛的选择,因为:(1)太贵(因为没有盗版);(2)太大(不必要的东西太多);(3)离应用太远(直接在服务器上运行不方便或效率太低)。
在开源世界,有许多方法和软件可以取代MATLAB。如统计学专用的R语言,与MATLAB兼容的Octave,接近MATLAB简单性又接近C语言效率的Julia,还有如日中天的Python,互联网之霸JAVA以及Javascript等等都可用。其中,R、Python、Octave的可视化也做得很好,计算包也很多,而且可直接工程应用。
纯C语言下的可视化问题
让最合适的工具去做最合适的事。C语言(即便是VC++在MFC的帮助下)是不擅长画图的,所以,C语言就应专注算法,其他的,就让专用的工具软件去做好了。
在信号处理领域,有许多开源软件工具可用:如
- 数据输入输出接口工具
- 图像处理及格式转换,图像数据解析: ImageMagick ( www.imagemagick.org )
- 多媒体文件处理:FFmpeg ( ffmpeg.org )
- 音频格式转换和处理:lame, sox ( sox.sourceforge.net/ )
- 可视化工具
- Gnuplot (www.gnuplot.info ) 曲线、图像、动画gif图
- GraphViz (www.graphviz.org )流程图
- echarts ( echarts.baidu.com ) 百度出品的基于js的开源网页图表展示
- 一些看图工具(很多,任意一款都可。用于查看图片、动画等)
有了数据输入输出接口工具,我们就可以以文本(或简单二进制流,如转化为音频wav格式,图像bmp格式)的方式,用C语言读入要处理的各种格式的数据,并将数据处理后以文本输出,转换为要求的格式。
有了可视化工具,我们就可以将数据以曲线、图形、动画等方式展示出来,还可以直接将可视化结果保存为文件(如位图png、bmp、jpg格式,动画gif格式,矢量图svg格式等等),供浏览软件查看,也可供服务器端WEB调用。
利用许多开源软件工具集成实现好用的软件开发环境,这也是如Octave、R、python、Julia等许多更高级开源软件平台通行的做法。
所以,用C语言开发信号处理算法,数据的输入输出及可视化都可用其他开源工具完成,我们也能将编程的主要精力集中在算法上。C语言能调用经典的数学算法包,不足的也可用R或Python等补充(工程上,只要是命令行程序,就能通过操作系统指令来调用,这也正是在操作系统上实现多语言协作的精意)。
最后的一个问题是,当得到了图片、动画、声音、视频、甚至只是数据,我们自己能开发一个最简单软件去展示计算结果吗?
最简模式的功能要求
能将文本、图片、动画、声音、视频、甚至只是数据用一个可视化方式的软件展现,还要自己开发这个软件,似乎工作量和难度都不小。比如,我们需要这样功能的可视化软件:
- 能显示各种格式的位图图片 (是一个看图软件)
- 能显示矢量图(svg,wmf,emf)
- 能显示动画(gif)或flash的swf
- 能看各种格式的视频 (是一个视频播放器)
- 能播放音频文件 (是一个音频播放器)
- 能阅读pdf格式文档 (是一个Acrobat Reader)
还要求:
- 这个软件要是有源码的(自己编写的)
- 无商业版权冲突的,可以带上自己的LOGO。
- 在软件体积上不能太大,最好在1M以内。
- 这个软件是以命令行模式工作的。
- 而且编写的代码量在100行以内。
解决法
可能吗?
可能。肯定能。因为这样的软件,一定是要站在巨人的肩膀上的。
依据我上一篇文章所论,可视化属于人机界面,应尽可能交给浏览器去做啊!
我的解决方案是:开发一个最简单的窗口程序,其中直接嵌入IE浏览器控件。这样,IE浏览器能做的事,我就能做了。
显然,这大概算不上编程吧。
实现时,用VC行,用C#也行。但C#实现后的软件是需要.net的,所以,还就是用VC最干净。