今天看書時複習了matlab中數字影象處理的一些知識,有了一些新發現:

1.matlab工具箱中影象的座標表示與常見的數學表示略有不同,matlab中原點是(1,1)開始的,而平常所見的是從(0,0)開始的。如果影象是大小是M*N,那麼matlab中x,y範圍是1-N,1-M;平常是0-(N-1),0-(M-1)。這個需要注意一下。

2.matlab中二維資料運算時記得是矩陣運算還是陣列運算。矩陣運算時矩陣乘法,A * B;陣列乘法是點乘,A .* B;除去加減矩陣和陣列一樣之外,其他運算時都需要注意。在影象處理中陣列運算比較多。

3.資料的一維索引和二維索引(也就是向量和矩陣),例如:

一維索引(向量)

> A=[1 4 5 6 8 9]


A =

     1     4     5     6     8     9

>> A(3)   

ans =

     5

這裡面只要引用時只要A(i) 就可以了;

二維索引(矩陣)

 B=[1 2 3;4 5 6;12 13 89]

B =

     1     2     3
     4     5     6
    12    13    89

>>  B(2,1)

ans =

     4

>> B(:,2)

ans =

     2
     5
    13

這裡二維索引巧用冒號(:)

4.程式加速

在優化程式碼時,常用兩種優化方法:預分配陣列 和 向量化迴圈。

與分配陣列主要是在for迴圈時輸出要預先初始化陣列,這樣不必多次重複分配記憶體;向量初始化是利用向量與點乘,將for 迴圈寫成向量形式,這樣更好。

必須注意:首先,應致力於寫程式碼,程式碼正確且容易理解;然後,如果地阿媽執行不夠快,再利用程式碼優化的方法加快速度。

以上是一些新的發現,書籍參考清華大學出版社的《數字影象處理的MATLAB實現》,阮秋琦譯。