數字影象處理MATLAB基礎中的一些新發現
今天看書時複習了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實現》,阮秋琦譯。