數字圖像處理學習筆記之一 DIP緒論與MATLAB基礎

寫在前面的話

數字圖像處理系列的學習筆記是做者結合上海大學計算機學院《數字圖像處理》課程的學習所作的筆記,使用參考書籍爲《岡薩雷斯數字圖像處理(第二版)(MATLAB版)》,同時學習過程當中會參考網絡學習資源。對於數字圖像處理的學習不可能僅僅依靠做者所寫的這一系列筆記,而是須要花時間和精力學習,本文只可做參考和交流之用。因爲涉及此學科不久,在學習過程當中不免存在錯誤,請讀者不吝賜教。程序員


數字圖像處理緒論

數字圖像處理(DIP)的研究目標和處理對象:

DIP的研究目標是獲取信息,處理對象是數據。信息是圖像或任意一種對象的具備價值的屬性,而數據是信息的符號化載體。數組

*在人所接受的信息中約有60%來自視覺,20%來自聽覺,剩餘20%來自觸覺、嗅覺、味覺(固然第六感未歸入考慮啦)。這一數據來源未加詳察,只是經過這一或真或假的數據能夠看出視覺信息對於人類信息獲取的重要性。網絡

圖像、數字圖像、數字圖像處理

圖像是可使人產生視覺感知的實體,數字圖像是圖像在計算機內的存在形式,數字圖像處理則是經過計算機或其餘信息技術對數字圖像進行處理,從而實現預期目的。編輯器

*數字圖像處理並不是只侷限於可見光譜範圍,從伽馬射線到無線電波的整個波段,只要可以使用成像機器獲取圖像並轉換成數字圖像,均可使用DIP技術進行處理。函數

MATLAB在DIP中的做用

「MATLAB一切皆矩陣」,MATLAB提供了強大的數值計算功能,在MATLAB中將圖像做爲矩陣處理。除了基本的工具,MATLAB補充了許多針對特定應用需求的工具箱,圖像處理工具箱(Image Processing Toolbox)就是其中之一。工具

對於MATLAB的應用,只要有C語言的良好基礎,就能駕輕就熟。性能

DIP中MATLAB的學習

做者建議首先有C語言基礎,不需特地學習MATLAB,在使用中慢慢積累就頗有效。學習

圖像工程(宏觀視角看DIP)

圖像工程有三個層次:圖像處理(像素級處理)、圖像分析(從像素到關於目標的描述數據)、圖像理解(圖像中有什麼目標、目標間有什麼關係、圖像是什麼場景、如何應用場景等)。優化

圖像處理的內容

  1. 圖像加強:加強有用信息,減小干擾信息,改善視覺質量。
  2. 幾何處理:放縮、旋轉、配準等。
  3. 圖像復原:模糊圖像復原等。
  4. 圖像重建:由截面的投影,重建該截面(如CT技術)。
  5. 圖像編碼:JPEG等,主要考慮壓縮。
  6. 模式識別:文字、指紋、人臉識別等。

圖像處理與計算機圖形學

圖形雖然是圖像的一種,但圖像處理更傾向於處理來源於現實的圖像(採樣而得),而計算機圖形學中的圖形是由一組數學公式描述獲得的。所以圖像處理與計算機圖形學是獨立的學科方向,偶有交集。編碼

圖像的數字化

圖像數字化過程描述爲:採樣、量化、編碼。

採樣通常是等距採樣,在圖像上構造直角座標系xOy,對圖像的橫縱座標進行等距劃分後得到像素點(實際上是一個個小方格[ia/N,(i+1)a/n)*[jb/M,(j+1)b/M))。

量化是在像素點內取一個表明值做爲像素值。

編碼採用PCM編碼(脈碼調製)。

*PCM是按照既定規則將時間連續、取值連續的模擬信號轉換爲時間離散、取值離散的數字信號。

空域與頻域

空域和頻域是數字圖像處理的兩個方面,有的問題在空域處理簡單,有的在頻域更方便。關於空域和頻域的詳細說明能夠點擊連接


MATLAB基礎

命令行、編輯器、工做區、當前文件夾

在MATLAB窗口中,除了有Windows窗口常見的標題欄、菜單欄、工具欄以外,還有

數據類、運算符、流控制

在面向過程的程序設計語言中,數據類型、運算符和流程控制是必須面對的,可是都基本與C一致,能夠在使用過程當中須要用到時再查詢。

*MATLAB提供的數據類型除了常見的基本數據類型外,還有函數句柄、單元數組和結構,後文將會逐一展開。

索引技術

索引在各類程序設計語言中都存在,可是在MATLAB中顯得尤其重要,由於MATLAB的一切都是矩陣,對矩陣的操做離不開索引。按照任意一本教材使用幾回就會熟悉索引了。

MATLAB函數定義

MATLAB函數(M函數)標準格式以下:

  • 函數定義行
  • H1行(概要信息行)
  • 幫助文本
  • 函數體
  • 註釋

根據標準格式定義一個示例函數(定義於eg_sum.m文件中)以下:

function [ s ] = eg_sum( n )
%Calculate the sum of numbers from 1 to n.
%This function is a simple example of function definition. It is used to calculate the sum of a series of numbers from 1 to n.
s=0;
for i=1:n
s=s+i;
end
end

函數句柄(Function Handle)

函數句柄使用函數句柄運算符@來建立。函數句柄的本質是調用函數的全部信息,將這些信息經過函數句柄變量存儲起來,在後續調用時直接使用函數句柄來調用,能夠省去在衆多函數信息中查詢目的函數信息的時間。在一個程序高頻使用的函數,若是使用函數句柄來存儲其調用信息,則能夠起到優化程序性能的做用。

函數句柄有兩類,一類是命名函數句柄(又稱簡單函數句柄),另外一類是匿名函數句柄(相似於C宏定義)。

命名函數句柄示例:使用函數句柄f來存儲sin函數的調用信息

f=@sin;
f(pi/4);

匿名函數句柄示例:使用函數句柄f來存儲表達式y=x.^2的調用信息,@(x)中的x給出了輸入參數列表

f=@(x) y=x.^2;
f(3);

或:

f=@() sin(pi/4);

單元矩陣

單元矩陣其實就是將多個類型不限的變量組合到一塊兒,運算符是花括號{},可是做者認爲並不經常使用,故省略了。可是有一個細節值得一提,單元矩陣建立時是將內容變量建立了一個副本,所以改變原變量並不能改變單元矩陣。

結構

相似於C結構體,使用點運算符.取元素。

計時器策略

計時器通常是爲了測量程序的運行時間,是效率的量化表現。MATLAB有專門用來計時的函數,也能夠本身製做計時器。

  • 使用clock()函數獲取當前時間,在首尾各獲取一次,差值即爲用時。
  • 使用tic()、toc()函數配對使用來計時。
  • 使用timeit()函數來計時,具體用法請自行查閱。

程序基本優化

MATLAB程序的基本優化策略有兩種:預分配和向量化循環。

預分配如其字面意思,即在矩陣使用以前作一次初始化,主要是在循環過程當中動態變化矩陣尺寸時。MATLAB明明能夠自動修正矩陣的尺寸,爲何非要在使用前初始化呢?緣由很簡單,看似是自動修正矩陣尺寸,其實背後的實現較爲複雜,至少要從新申請空間和賦值原數組,這些操做的實現會耗費大量時間。

向量化循環在舊版本的MATLAB中使用較多,並且效果顯著。其原理是使用矩陣運算符、索引技術、庫函數來徹底消除循環。好比使用A=A>threshold;這條語句代替for循環判斷,從而提升效率。可是在新版本的MATLAB中,已經可以自動編譯for循環來加速,所以向量化循環已經不須要程序員來考慮了。

相關文章
相關標籤/搜索