星期一, 2月 24, 2014

如何給強大的 Matlab,再外加 ITK 的大力丸咧?(介紹篇)

直想要做些醫學影像的研究,所以小弟我涉獵了一些影像研究的東西。但是經歷上根本不是學computer science的,血液中流的也不是程式設計師的血,只好勉強用用matlab來解決我的問題。雖然matlab的image toolbox相當強大,但是,做影像的永遠都差那麼一些些,所以也需要一些外加的程式庫來運用。

有不少朋友都問我,要做影像為什麼不用openCV?說真的,openCV真是個好物,對我而言,還有強者Kota Yamaguchi 幫它轉成matlab認得的function,更是加快在matlab上的應用。但是openCV在體質上,並不太適合用在醫學影像。它大部份的程式庫,不管2D或3D,都是處理8 bit, 3 channel的彩色影像為主,只有少數函式可以接受double的數值。而醫學影像卻常常是12 bit, 1 channel的灰階影像(其值大多在-1024 ~ 1023之間,我實際處理,有遇過數值到達16k的範圍)。這樣的資料丟到openCV的程式庫裏去,要嗎被吐出來,不然就是給個怪怪的結果。所以,必需做些資料轉換的工作,甚至要把 Grayscale的部份劣化。就看你能不能接受這樣的結果。


所以,在醫學影像這一方面,功能比較強悍的、發展比較完整的、仍舊持續維護的,就變成是insight toolkit (ITK)了。ITK是由以下幾個單位共同支援開發的(如下圖),可以看到有美國幾個國家級的研究單位參與其中,有國家級的經費資助,也難怪它可以持續維護及開發。


不過,同樣都是c語言的程式庫,openCV有強者Kota Yamaguchi 幫它轉成matlab認得的function,而 ITK在2007年,有人幫它轉成 matitk函式庫後,就沒下文了。matitk似乎是基於2006年8月,2.4.04版本的itk所做,它有擁有的函式不超過50個(現在ITK已經到4.5.0版,擁有的函式應該有數百個)。有些用起來還怪怪的 (比如NeighbourhoodConnectedSegmentation, SNC 這一個,就有 X,Y定義上的錯亂)。在matlab下安裝快速,是matitk最大的優點,在沒有東西可以使用的狀況下,使用它是最為簡單的。

另外有一個計畫,是叫做 simITK,它最後一個版本是發佈於2010/06/02,也是距今快4年前的事了,而且download 連結也掛了。在我看起來,這是一個paper發表過後,研究生畢業了,然後就沒錢沒下文的計畫。

而現在比較正常,同時也是由itk本身維護的,就是simpleITK了。

說穿了,simpleITK就是官方用各種常用的語言把它的呼叫包好,其實,背後還是由原來的c語言在操刀。這樣的好處是,讓python, C++, C#, java等語言可以直接 import函式進來,不必自已搞定介面,搞定函式、物件之間的相依。但是,真的可以用的函式還是少一些,而它的發展也還在beta階段,最新的版本為0.7.1。

下次再來講,如何在matlab中引入呼叫執行java版本的simpleITK。

沒有留言:

//for syntaxhighlighter 3 //看一下載入的JS模組有哪些,不要的就刪掉 //end syntaxhighlighter 3