數字圖像處理(MATLAB版)學習筆記(1)——第1章 緒言


0、下定決心

當當入手數字圖像處理一本,從此開此正式跨入數字圖像處理大門。以前雖然多多少少接觸過這些東西,也做過一些相關的事情,但感覺都不夠系統,也不夠專業,從今天開始,一步一步地學習下去,相信會有成果的。

1、本章知識點結構

 下面的思維導圖主要用xmind制作。知識點是對第1章的一些個人認為比較重要的知識概括了一下,然后加了自己的一點點理解。

2、書中例子實踐

 第一個例子,試一試手。

1 function f = twodsin(A, u0, v0, M, N)
2 f = zeros(M, N);
3 for c = 1:N
4     v0y = v0 * (c - 1);
5     for r = 1:M
6         u0x = u0 * (r - 1);
7         f(r, c) = A * sin(u0x + v0y);
8     end
9 end

運行速度,只要0.0154秒,但是書上的用了0.0471秒,看來我的電腦比作者的電腦好了不少哈,或者是高版本的MATLAB(2014a),優化做得更好。

>> timeit(@() twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512))

ans =

    0.0154

將第一個例子的第2行注釋掉,運行如下,果然速度還是下降了不少,所以還是預分配內存比較好。

>> timeit(@() twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512))

ans =

    0.0263

 就是一個二維的sin(x,y)函數,它的幅度就表示亮度,如下圖所示,黑白正弦起伏,感覺很不錯的,MATLAB果然很強大。

>> f=twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512);
>> imshow(f,[]);

當然此例子的關鍵不在畫出圖像,而是要通過向量化的方式將上述函數中的兩個for循環去掉,從而提高算法的速度。

1 function f = twodsin2(A, u0, v0, M, N)
2 r = 0:M-1;
3 c = 0:N-1;
4 [C, R] = meshgrid(c, r);
5 f = A * sin(u0 * R + v0 * C);

同樣的參數,只用了0.0072,比上個0.0154,快了50%多。

>> timeit(@() twodsin2(1, 1/(4*pi), 1/(4*pi), 512, 512))

ans =

    0.0072

對meshgrid(M,N)函數,我是直接把它理解為生個一個網格,這個網格的就是MxN的面積大小,而向量M和N中的元素,就是這個網格上的點,可以用如下圖來表示,更加直觀一點,如理解有誤,歡迎指正。

上述網格表示的是如下meshgrid,有了圖,應該非常容易理解。

>> [X,Y]=meshgrid(1:3,10:14)

X =

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3


Y =

    10    10    10
    11    11    11
    12    12    12
    13    13    13
    14    14    14

總結一下

通過對本章的學習,對圖像的理解,更加深入,可以從數學的角度來看一幅圖像,同時,也更加清楚以明白圖像的信息是如何存儲的。這一章中,也講子許多MATLAB的技巧,很實用,也深深體會到了MATLAB處理矩陣的強大功能,這一優勢確實是C/C++/C#等語言無法比擬的。路漫漫,吾必將上下求索。Keep on!!

本博文純原創,未經博主同意(我的郵箱:endless@139.com),請勿轉載。有想交流學習的小伙伴,可以加我的QQ:1449494575,歡迎各位。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM