1. 程式人生 > >如何學好影象處理--從小白到大神。

如何學好影象處理--從小白到大神。

  什麼是數字?歷史、以及它所研究的內容

本文引用地址:http://www.eepw.com.cn/article/201702/344072.htm

  說起,你會想到什麼?你是否真的瞭解這個領域所研究的內容。縱向來說,數字研究的歷史相當悠久;橫向來說,數字影象處理研究的話題相當廣泛。

  數字影象處理的歷史可以追溯到近百年以前,大約在1920年的時候,影象首次通過海底電纜從英國倫敦傳送到美國紐約。影象處理的首次應用是為了改善倫敦和紐約之間海底電纜傳送的圖片質量,那時就應用了影象編碼,被編碼後的影象通過海底電纜傳送至目的地,再通過特殊裝置進行輸出。這是一次歷史性的進步,傳送一幅圖片的時間從原來的一個多星期減少到了3小時。

  1950年,美國的麻省理工學院製造出了第一臺配有圖形顯示器的電子計算機——旋風I號(Whirlwind I)。旋風I號的顯示器使用一個類似於示波器的陰極射線管(Cathode Ray Tube,CRT)來顯示一些簡單的圖形。1958年美國Calcomp公司研製出了滾筒式繪圖儀,GerBer公司把數控機床發展成為平板式繪圖儀。在這一時期,電子計算機都主要應用於科學計算,而為這些計算機配置的圖形裝置也僅僅是作為一種簡單的輸出裝置。

  隨著計算機技術的進步,數字影象處理技術也得到了很大的發展。1962年,當時還在麻省理工學院攻讀博士學位的伊凡·蘇澤蘭(Ivan Sutherland)成功開發了具有劃時代意義的“畫板”(Sketchpad)程式。而這正是有史以來第一個互動式繪圖系統,同時這也是互動式電腦繪圖的開端。從此計算機和圖形影象被更加緊密地聯絡到了一起。鑑於伊凡·蘇澤蘭為計算機圖形學創立所做出的傑出貢獻,他於1988年被授予計算機領域最高獎——圖靈獎。

  1964年,美國加利福尼亞的噴氣推進實驗室用計算機對“旅行者七號”太空船發回的大批月球照片進行處理,以校正航天器上攝影機中各種型別的影象畸變,收到了明顯的效果。在後來的宇航空間技術中,數字影象處理技術都發揮了巨大的作用。

  到了20世紀60年代末期,數字影象處理已經形成了比較完善的學科體系,這套理論在20世紀70年代發展得十分迅速,並開始應用於醫學影像和天文學等領域。1972年,美國物理學家阿倫·馬克利奧德·柯麥科(Allan MacLeodCormack)和英國電機工程師戈弗雷·紐博爾德·豪恩斯弗爾德(Godfrey Newbold Housfield)發明了軸向斷層術,並將其用於頭顱診斷。世界第一臺X射線計算機軸向斷層攝影裝置由EMI公司研製成功,這也就是人們通常所說的CT(Computer Tomograph)。CT可通過一些演算法用感知到的資料去重建通過物體的“切片”影象。這些影象組成了物體內部的再現影象,也就是根據人的頭部截面的投影,經計算機處理來進行影象重建。鑑於CT對於醫學診斷技術的發展所起到的巨大推動作用,柯麥科和豪恩斯弗爾德於1979年獲得了諾貝爾生理或醫學獎。

  隨後在2003年,諾貝爾生理或醫學獎的殊榮再次授予了兩位在醫療影像裝置研究方面做出傑出貢獻的科學家——美國化學家保羅·勞特伯爾(Paul Lauterbur)和英國物理學家彼得·曼斯菲爾(Peter Mansfield)。兩位獲獎者在利用磁共振成像(Magnetic Resonance Imaging,MRI)顯示不同結構方面分別取得了開創性成就。瑞典卡羅林斯卡醫學院稱,這兩位科學家在MRI領域的開創性工作,代表了醫學診療和研究的重大突破。而事實上,核磁共振的成功同樣也離不開數字影象處理方面的發展。即使在今天,諸如MRI影象降噪等問題依然是數字影象處理領域的熱門研究方向。

  說到數字影象的發展歷程,還有一項至關重要的成果不得不提,那就是電荷耦合元件(Charge-coupled Device,CCD)。CCD最初是由美國貝爾實驗室的科學家維拉德·波義耳(Willard Sterling Boyle)和喬治·史密斯(George Elwood Smith)於1969年發明的。CCD的作用就像膠片一樣,它能夠把光學影像轉化為數字訊號。今天人們所廣泛使用的數碼照相機、數碼攝影機和掃描器都是以CCD為基礎發展而來的。換句話說,我們現在所研究的數字影象主要也都是通過CCD裝置獲取的。由於波義耳和史密斯在CCD研發上所做出的巨大貢獻,他們兩人共同榮獲了2009年度的諾貝爾物理學獎。

  數字影象處理在今天是非常熱門的技術之一,生活中無處不存在著它的影子,可以說它是一種每時每刻都在改變著人類生活的技術。但長久以來,很多人對數字影象處理存在著較大的曲解,人們總是不自覺地將影象處理和Photoshop聯絡在一起。大名鼎鼎的Photoshop無疑是當前使用最為廣泛的影象處理工具。類似的軟體還有Corel公司生產的CorelDRAW等軟體。

  儘管Photoshop是一款非常優秀的影象處理軟體,但它的存在並不代表數字影象處理的全部理論與方法。它所具有的功能僅僅是數字影象處理中的一部分。總的來說,數字影象處理研究的內容主要包括如下幾個方面:

  1)影象獲取和輸出

  2)影象編碼和壓縮

  3)影象增強與復原

  4)影象的頻域變換

  5)影象的資訊保安

  6)影象的區域分割

  7)影象目標的識別

  8)影象的幾何變換

  但影象處理的研究內容,又不僅限於上述內容!所以說影象處理的研究話題是相當寬泛的。那現在影象處理都應用在哪些領域呢?或許我們可能熟知的例子有(當然,你應該還能舉出更多例子):

  1)一些專業影象處理軟體:Photoshop、CorelDRAW……

  2)一些手機APP應用:美圖秀秀、玩圖……

  3)一些醫學影象處理應用:MRI、彩超影象處理……

  4)一些製造業上的應用:元器件檢測、瑕疵檢測……

  5)一些攝像頭、相機上的應用:夜間照片的質量改善……

  6)一些電影工業上是應用:換背景、電影特技……

  什麼樣的人會去學(或者需要學)影象處理?

  1)如果你是我上述那些應用領域的從業者,你當然需要掌握影象方面的理論和技術;2)相關專業的研究人員、大專院校的博士生、研究生。

  所謂相關專業又是指什麼呢?這個答案也可能相當寬泛,例如(但不僅限於此):Computer Science, Software Engineering, Electronic Engineering,Biomedical Engineering, Automation, Control, Applied Mathematics……

  如何學好影象處理——我的一些諫言

  1)對於初級入門者

  一個紮實的基礎和對於影象處理理論的完整的、系統的整體認識對於後續的深入研究和實踐應用具有非常非常重要的意義。

  我經常喜歡拿武俠小說《天龍八部》中的一段情節來向讀者說明此中的道理,相信讀者對這部曾經被多次搬上銀幕的金庸作品已經耳熟能詳了。書中講到有個名叫鳩摩智的番僧一心想練就絕世武學,而且他也算是個相當勤奮的人了。但是,他錯就錯在太過於急功近利,甚至使用道家的小無相功來催動少林絕技。看上去威力無比,而且可以在短時間內“速成”,但實則後患無窮。最終鳩摩智走火入魔,前功盡廢,方才大徹大悟。這個故事其實就告訴我們打牢基礎是非常重要的,特別是要取得更長足的發展,就更是要對基本原理刨根問底,力求甚解,從而做到庖丁解牛,遊刃有餘。

  一些看似高深的演算法往往是許多基礎演算法的組合提升。例如,令很多人望而卻步的SIFT特徵構建過程中,就用到了影象金字塔、直方圖、高斯濾波這些非常非常基礎的內容。但是,它所涉及的基礎技術顯然有好幾個,如果缺乏對影象處理理論的系統認識,你可能會感覺事倍功半。因為所有的地方好像都是溝溝坎坎。

  關於課程——

  在這個階段其實對於數學的要求並不高,你甚至可以從一些感性的角度去形象化的理解影象處理中很多內容(但不包括頻域處理方面的內容)。具體到學習的建議,如果有條件(例如你還在高校裡讀書)你最好能選一門影象處理方面的課程,系統地完整的地去學習一下。這顯然是入門的最好辦法。如此一來,在建立一個完整的、系統的認知上相當有幫助。如果你沒辦法在學校裡上一門這樣的課,網上的一些公開課也可以試試。但現在中文MOOC上還沒有這方面的優質課程推薦。英文的課程則有很多,例如美國加州倫斯勒理工學院Rich教授的數字影象處理公開課——https://www.youtube.com/channel/UCaiJlKxXamoODQtlx486qJA?spfreload=10。

  關於教材——

  顯然,只聽課其實還不太夠,如果能一併讀一本書就最好了。其實不用參考很多書,只要一本,你能從頭讀到尾就很好了。如果你沒有條件去上一門課,那讀一本來完整的自學一下就更有必要了。這個階段,去網上到處找部落格、看帖子是不行的。因為你特別需要在這個階段對這門學問建立一個系統的完整的知識體系。東一塊、西一塊的胡拼亂湊無疑是坑你自己,你的知識體系就像一個氣泡,可能看起來很大,但是又脆弱的不堪一擊。

  現在很多學校採用岡薩雷斯的《數字影象處理》一書作為教材。這是一本非常非常經典的著作。但是我必須要提醒讀者:

  1)這是一本專門為Electronic Engineering專業學生所寫的書。它需要有訊號與系統、數字訊號處理這兩門課作為基礎。如果你沒有這兩門課的基礎,你讀這本書要麼是看熱鬧,要麼就是看不懂。

  下面是岡書中的一張插圖。對於EE的學生來說,這當然不是問題。但是如果沒有我說的那兩門課的基礎,其實你很難把握其中的精髓。H和h,一個大小一個小寫,岡書中有的地方用H,有的地方用h,這都是有很深刻用意的。原作者並沒有特別說明它們二者的區別,因為他已經預設你應該知道二者是不同的。事實上,它們一個表示頻域訊號,一個表示時域訊號,這也導致有時候運算是卷積,有時候運算是乘法(當然這跟卷積定理有關)。所以我並不太建議那些沒有這方面基礎的學生在自學的時候讀這本書。

  2)岡薩雷斯教授的《數字影象處理》第一版是在1977年出版的,到現在已經快40年了;現在國內廣泛使用的第二版是2002年出版的(第三版是2007年但是其實二者差異並不大),到現在也有20年左右的時間了。事實上,岡薩雷斯教授退休也有快30年了。所以這本書的內容已經偏於陳舊。數字影象處理這個領域的發展絕對是日新月異,突飛猛進的。特別在最近二三十年裡,很多新思路,新方法不斷湧現。如果你看了我前面推薦的Rich教授的公開課(這也是當前美國大學正在教學的內容),你一下子就會發現,原來我們的教育還停留在改革開放之前外國的水平上。這其實特別可怕。所以我覺得岡薩雷斯教授的《數字影象處理》作為學習過程中的一個補充還是不錯的,但是如果把它作為主參考,那真的就是:國外都洋槍洋炮了,我們還在大刀長矛。

  2)對於中級水平者

  紙上得來終覺淺,絕知此事要躬行。對於一個具有一定基礎的,想更進一步的中級水平的人來說,這個階段最重要的就是增強動手實踐的能力。

  還是說《天龍八部》裡面的一個角色——口述武功、歎為觀止的王語嫣。王語嫣的腦袋裡都是武功祕籍,但問題是她從來都沒練過一招一式。結果是,然並卵。所以光說不練肯定不靈啊。特別是,如果你將來想從事這個行業,結果一點程式碼都不會寫,那幾乎是不可想象的。學習階段,最常被用來進行演算法開發的工具是和OpenCV。你可以把這兩個東西都理解為一個相當完善的庫。當然,在工業中C++用得更多,所以的應用還是很有限的。前面我們講到,影象處理研究內容其實包括:影象的獲取和編解碼,但使用和OpenCV就會掩蓋這部分內容的細節。你當然永遠不會知道,JPEG檔案到底是如何被解碼的。

  如果你的應用永遠都不會涉及這些話題,那麼你一直用Matlab和OpenCV當然無所謂。例如你的研究領域是SIFT、SURF這種特徵匹配,可以不必理會編解碼方面的內容。但是如果你的研究話題是降噪或者壓縮,可能你就繞不開這些內容。最開始學的時候,如果能把這部分內容也自己寫寫,可能會加深你的理解。以後做高階應用開發時,再呼叫那些庫。所以具體用什麼,要不要自己寫,是要視你所處的階段和自己的實際情況而定的。以我個人的經驗,在我自學的時候,我就動手寫了Magic House,我覺得這個過程為我奠定了一個非常夯實的基礎,對於我後續的深入研究很有幫助。

  3)對於高階進階者

  到了這個程度的讀者,程式設計實現之類的基本功應該不在話下。但是要往深,往高去學習、研究和開發影象處理應用,你最需要的內容就變成了數學。這個是攔在很多處於這個階段的人面前的一大難題。如果你的專業是應用數學,當然你不會感覺有問題。但如果是其他專業背景的人就會越發感覺痛苦。

  如果你的影象處理是不涉及機器學習內容的,例如用Poisson方程來做影象融合,那你就要有PDE數值解方面的知識;如果你要研究KAZE特徵,你就必須要知道AOS方面的內容。如果你研究TV降噪,你又要知道泛函分析中的BV空間內容……這些詞你可能很多都沒聽過。總的來說,這塊需要的內容包括:複變函式、泛函分析、偏微分方程、變分法、數學物理方法……

  如果你要涉足機器視覺方法的內容,一些機器學習和資料探勘方法的內容就不可或缺。而這部分內容同樣需要很強大的數學基礎,例如最大似然方法、梯度下降法、尤拉-拉格朗日方程、最小二乘估計、凸函式與詹森不等式……

  當然,走到這一步,你也已經脫胎換骨,從小白到大神啦!路漫漫其修遠兮,吾將上下而求索。