論訊號處理研究中的視覺化問題的解決
引子
很多人在做研究時,採用了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
- 多媒體檔案處理:FFmpeg
- 音訊格式轉換和處理:lame, sox
- 視覺化工具
- echarts ( echarts.baidu.com ) 百度出品的基於js的開源網頁圖表展示
- 一些看圖工具(很多,任意一款都可。用於檢視圖片、動畫等)
有了資料輸入輸出介面工具,我們就可以以文字(或簡單二進位制流)的方式用C語言讀入要處理的各種格式的資料,並將資料處理後以文字輸出,轉換為要求的格式。
有了視覺化工具,我們可以將資料以曲線、圖形、動畫等方式展示,還可以直接將視覺化結果儲存為檔案(如點陣圖png、bmp、jpg格式,動畫gif格式,向量圖svg格式等等),供瀏覽軟體檢視。
利用許多開源軟體工具整合實現好用的軟體開發環境,這也是如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最乾淨。