◆陳凱迪
醫(yī)學(xué)圖像信息處理是一門結(jié)合了算法與程序設(shè)計(jì)的專業(yè)課程,若僅依靠Visual C++ 6.0作為開發(fā)平臺(tái),可能導(dǎo)致學(xué)生視野偏窄、學(xué)習(xí)效率偏低。通過此次教學(xué)改革,將Matlab、OpenCV、VTK及Visual Studio開發(fā)平臺(tái)共同應(yīng)用于教學(xué)過程中,在不同的章節(jié)突出不同的內(nèi)容。實(shí)踐表明,借助這些高級(jí)開發(fā)平臺(tái)進(jìn)行學(xué)習(xí),學(xué)生學(xué)習(xí)積極性得到激發(fā),理論水平及工程實(shí)踐能力明顯提升,為開展畢業(yè)設(shè)計(jì)或科研工作打下良好的基礎(chǔ)。
醫(yī)學(xué)圖像信息處理是結(jié)合溫州醫(yī)科大學(xué)醫(yī)學(xué)特色,向信息管理與信息系統(tǒng)專業(yè)學(xué)生開設(shè)的一門高年級(jí)專業(yè)課,旨在讓學(xué)生掌握生物醫(yī)學(xué)成像及圖像處理方面的基本原理、方法和發(fā)展趨勢,拓寬學(xué)生知識(shí)基礎(chǔ),提高學(xué)生素質(zhì),使學(xué)生具有解決一般醫(yī)學(xué)成像和圖像處理問題的能力。
以前,在醫(yī)學(xué)圖像信息處理課程中是以Visual C++ 6.0和Matlab作為課堂演示及上機(jī)實(shí)驗(yàn)的平臺(tái)。Visual C++ 6.0作為一種通用的開發(fā)平臺(tái),使用其編寫程序時(shí),工作量大,開發(fā)周期長。對于學(xué)生來說,把大量的時(shí)間用在熟悉開發(fā)語言而不是用在學(xué)習(xí)圖像處理的算法上,顯然不是本課程的目的。因此,僅使用Visual C++作為教學(xué)及實(shí)驗(yàn)的工具并不合適。
Matlab語法結(jié)構(gòu)簡單,提供了專門的圖像處理工具箱,使學(xué)習(xí)者不必太多地去關(guān)心圖像的文件格式、讀寫、顯示等細(xì)節(jié),而把精力集中在算法研究上。但是,僅偏重于學(xué)生如何使用Matlab工具箱實(shí)現(xiàn)圖像處理的功能,不利于學(xué)生深入理解各種算法原理。而且,由于Matlab程序的移植性較差,學(xué)生學(xué)完后不能面對實(shí)際的開發(fā)應(yīng)用,難以提高實(shí)踐動(dòng)手能力[1]。
本課題研究的目的在于拓寬學(xué)生知識(shí)面,在教學(xué)過程中增加了OpenCV和VTK這兩種高層開發(fā)平臺(tái),以期提高學(xué)習(xí)效率,為開展學(xué)生科研、畢業(yè)設(shè)計(jì)以及今后的工作打下更加扎實(shí)全面的基礎(chǔ)。
此項(xiàng)教學(xué)改革的總體思路是將Matlab、OpenCV、VTK共同引入醫(yī)學(xué)圖像信息處理課程的學(xué)習(xí),在不同的章節(jié)嵌入適當(dāng)?shù)氖纠绦?,分析算法原理和代碼實(shí)現(xiàn)。同時(shí),設(shè)計(jì)合適的實(shí)驗(yàn)項(xiàng)目,讓學(xué)生能夠按部就班、從簡到難地開展基于以上開發(fā)工具的上機(jī)實(shí)驗(yàn)。改變學(xué)生由于C++語言的復(fù)雜繁瑣所導(dǎo)致的學(xué)習(xí)積極性不高、缺乏自主探索意識(shí)的現(xiàn)狀,轉(zhuǎn)而能夠在學(xué)習(xí)和實(shí)踐中充分體驗(yàn)醫(yī)學(xué)數(shù)字圖像處理的內(nèi)涵和魅力。同時(shí),教師可以挑選對該方面感興趣的學(xué)生,以學(xué)生科研課題或畢業(yè)設(shè)計(jì)的形式,做進(jìn)一步的指導(dǎo),從而使本課程的教學(xué)水平得到提高。
Matlab平臺(tái)的應(yīng)用 Matlab雖然不適合于本課程所有章節(jié)的演示與實(shí)驗(yàn),但在介紹數(shù)字圖像的一些基本概念時(shí)不失為一個(gè)好的平臺(tái),因?yàn)樗哂薪缑嬷庇^明了、命令簡單、易學(xué)易懂的優(yōu)點(diǎn)。以下幾幅圖是在教學(xué)過程中使用的部分示例:圖1是用Matlab命令顯示的人體骨骼PET原始圖像及其直方圖,圖2是原始圖像的灰度反轉(zhuǎn)圖及其直方圖。
圖1 人體骨骼PET原始圖像及其直方圖
圖2 原始圖像的灰度反轉(zhuǎn)圖及其直方圖
OpenCV的應(yīng)用 OpenCV即開源計(jì)算機(jī)視覺庫,它是以C函數(shù)和C++類的形式實(shí)現(xiàn)大量圖像處理算法。相對于Matlab而言,學(xué)生不僅可以利用OpenCV開放的源代碼,以函數(shù)進(jìn)行圖像處理,而且可以查看算法的代碼實(shí)現(xiàn),在提高編程能力的同時(shí)理解算法的原理[2]。
在講解圖像增強(qiáng)、圖像分割、圖像變換時(shí)設(shè)計(jì)了采用Visual Studio.net+OpenCV為平臺(tái)的實(shí)驗(yàn)內(nèi)容。因?yàn)榭紤]到工具的高效性和通用性,所以O(shè)penCV是本次教改中最為重要的一個(gè)教學(xué)內(nèi)容,所占學(xué)時(shí)也最多。根據(jù)以往經(jīng)驗(yàn),大多數(shù)學(xué)生對OpenCV并不熟悉,配置OpenCV的開發(fā)環(huán)境又比較麻煩,僅讓學(xué)生在實(shí)驗(yàn)課上跟著教師做一遍并不能讓他們真正掌握知識(shí),因此需要先在理論課上對OpenCV做詳細(xì)的介紹,演示各種開發(fā)案例,講解常用函數(shù)功能,然后在實(shí)驗(yàn)課上再讓學(xué)生對照實(shí)驗(yàn)指導(dǎo)書安裝OpenCV并一步步配置開發(fā)環(huán)境,接著完成各項(xiàng)實(shí)驗(yàn)內(nèi)容,包括在win32控制臺(tái)項(xiàng)目中使用OpenCV和在MFC框架下使用OpenCV進(jìn)行數(shù)字圖像處理。實(shí)驗(yàn)課后再布置若干個(gè)大型的實(shí)驗(yàn)任務(wù),可以2~3人一個(gè)小組,讓學(xué)生自己查資料開發(fā)完成,期末上交實(shí)驗(yàn)報(bào)告及源代碼。
實(shí)踐表明,采用理論課+實(shí)驗(yàn)課+課外實(shí)驗(yàn)的模式,整個(gè)學(xué)期持續(xù)地讓學(xué)生接觸、實(shí)踐新的開發(fā)工具,才有可能比較好地掌握這個(gè)工具。否則,很可能就變成學(xué)一段忘一段的無效學(xué)習(xí)。圖3是采用Sobel邊緣檢測算子分割圖像的效果圖,圖4是對圖像做閾值分割的效果圖,圖5和圖6分別是對圖像進(jìn)行仿射變換和透視變換的效果圖。
圖3 Sobel算子分割圖像
圖4 圖像閾值分割
圖5 圖像仿射變換
圖6 圖像透視變換
VTK的應(yīng)用 VTK是在OpenGL的基礎(chǔ)上,結(jié)合面向?qū)ο蠹夹g(shù),重新設(shè)計(jì)和開發(fā)用于三維計(jì)算機(jī)圖形、三維可視化、圖像處理的C++類庫。醫(yī)學(xué)圖像的三維重建和顯示是本課程中最抽象的內(nèi)容。在教學(xué)過程中,引入VTK三維可視化工具包,可提高學(xué)生對理論的理解,激發(fā)學(xué)習(xí)興趣。在講解這部分內(nèi)容時(shí)采用Visual Studio.net+VTK為演示平臺(tái),實(shí)驗(yàn)教學(xué)過程中采用表面繪制技術(shù)對醫(yī)學(xué)圖像進(jìn)行三維重建。需要說明的是,基于VTK的實(shí)驗(yàn)內(nèi)容對硬件的要求非常高,在實(shí)驗(yàn)室環(huán)境升級(jí)改造之前,只能提供用cmake配置VTK的文檔讓學(xué)生在自己的機(jī)器上進(jìn)行操作。
事實(shí)上,VTK提供的教材本身就非常好。VTK源程序包的Example目錄包括了一系列例子,它們都有詳盡的注釋。一步步學(xué)習(xí)這些例子,可以很容易理解VTK涉及的可視化概念和VTK編程的一般特點(diǎn)[3]。
教改中設(shè)計(jì)的利用VTK做CT片的三維重構(gòu)實(shí)驗(yàn),從算法和數(shù)據(jù)結(jié)構(gòu)來看,是一個(gè)讀取數(shù)據(jù)和圖形顯示的問題。教師事先準(zhǔn)備好符合DICOM 3.0標(biāo)準(zhǔn)的CT圖像文件,學(xué)生試著用VTK的vtk Image Reader類或者vtkVo lume Reader類去讀取數(shù)據(jù)。關(guān)于重建算法,對于CT片這種三維規(guī)則數(shù)據(jù)場,可以采取成熟、基本的算法來進(jìn)行三維重建,比如Marching Cubes算法。圖7為讀取一系列的頭骨切片圖像數(shù)據(jù),然后利用vtk Marching Cubes類提取的表面。
圖7 用MarchingCubes算法重建的頭骨表面
在醫(yī)學(xué)圖像信息處理課程中單獨(dú)使用某一種軟件開發(fā)工具都顯得比較片面,而同時(shí)將Matlab、OpenCV、VTK及Visual Studio開發(fā)平臺(tái)應(yīng)用于教學(xué)過程中,在不同的章節(jié)突出不同的內(nèi)容和方法,則是較為全面的考慮。實(shí)施此次教學(xué)改革,雖然學(xué)生的學(xué)習(xí)任務(wù)繁重了許多,對教師的要求也提高了很多,但收獲也是不言而喻的。其收獲在于三個(gè)方面:一是能夠結(jié)合過去所學(xué)的編程語言,學(xué)生在數(shù)字圖像處理方面的理論水平及工程實(shí)踐能力得到很大提高;二是為開展圖像相關(guān)的學(xué)生科研課題、畢業(yè)設(shè)計(jì)以及今后的工作打下基礎(chǔ);三是教師借此機(jī)會(huì)進(jìn)行知識(shí)的更新升級(jí),開闊教學(xué)思路,提高業(yè)務(wù)水平。
[1]馮伍,鐘田亮.Matlab在醫(yī)學(xué)圖像處理中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2011(6):42-43.
[2]李樹濤,胡秋偉.OpenCV在“數(shù)字圖像處理”教學(xué)中的應(yīng)用[J].電氣電子教學(xué)學(xué)報(bào),2010(6):26-27.
[3]VTK官網(wǎng)幫助文檔[EB/OL].[2013-08-16].http://www.vtk.org/VTK/help/documentation.html.