使用MATLAB設計小波變換程式中的若干問題 – Good night,Moon – wutao5935 – 和訊部落格

來源:互聯網
上載者:User

導讀:

在使用MATLAB完成小波變換程式和通過閾值來壓縮映像的過程中,我和許多同學都是邊學邊用,是從一個接一個的問題中逐步理解小波和MATLAB

寫程式的。因此我願意就個人遇到和解決問題的經驗與大家討論,希望能夠對遇到同樣問題的人有所協助。在清華大學林福宗老師倡導的網上互動的學習方式中,老

師同學的開誠布公的討論,尤其是林老師啟發大家對出現‘問題’採取的態度和做法,對我今後成長為一名合格的清華的研究生意義重大,謹以此文表示對他指導關

心的敬意!






  1. 內容簡介

  2.  



    本文分為三部分: 如何使用MATLAB設計小波標準與標準分解;如何完成使用小波變換壓縮映像;仍需探討的問題。每一部分主要以問題和例子的形式講述,為了便於參照,附錄部分給出部分原始碼供大家參考指正。

    我個人在完成作業的時候,走了許多彎路,最後,反覆讀老師的第3章講義的第3--5節,明白了小波變換的一些非常基礎性的知識,正是如此,我主要是按照第三章的例子,做出使用MATLAB進行Haar變換的執行個體,這至少對完成非標準Haar小波的3級分解與合成沒有任何問題,而且計算速度遠遠比使用一維變換快,甚至超過dwt2wavedec2。再者,是通過這些簡短的例子的學習,也能從實踐的角度理解小波變換的基礎知識和道理,我覺得掌握小波的知識要比簡單使用dwt2直接分析出結果更重要。為了讓使用一維變換或打算採用卷積完成分解重構程式的同學有所參考,也給出了我以前寫的代碼和設想供有興趣者參考。在映像壓縮的任務中,我個人建議採用wdencmp,原因是簡單可靠,能夠產生老師要求小波壓縮與重構的示範及PNG檔案。在最後部分著重對使用小波壓縮之後重構映像的PNG檔案會變大問題進行了簡單的猜測性的解釋和討論,希望感興趣的同學能深入研究。



  3. 如何使用
  4. MATLAB設計小波標準與標準分解



    1. 使用
    2. Haar和Db9小波編寫影像檔的標準和非標準分解重構程式

      實質上,任務書中規定首先要編寫4種程式之一:哈爾(haar)小波的標準分解重構程式;Daubechies 9小波的標準分解重構程式;哈爾(haar)小波的非標準分解重構程式;Daubechies 9小波的非標準分解重構程式。如果採用標準方法,需要產生圖3-25的系列映像。如果採用非標準方法則需要產生圖3-26的系列映像。

      我個人編寫了非標準的分解重構程式,並總結網上同學們公開的方法,認為可以有3種方法實現。但前提是必須仔細閱讀林老師推薦的補充教材第三章“小波與小波變換”的3.3、3.4和3.5節(14-27頁)。如果能使用MATLAB簡單地實踐一下教材的例子,至少完成哈爾小波的標準與非標準程式相當簡單。為此我主要介紹如何?老師教材給我們的例子是如何在MATLAB中實現的。然後,再引申到使用MATLAB的函數實現方法。為了描述問題簡便,使用黑體表示需在MATLAB的命令視窗(command window)的輸入部分。如果不熟悉下面出現的函數功能和使用方法,請再命令視窗中使用 help 函數名,如help dwt2,能夠得到英文的功能和用法說明。



    3. 哈爾小波變換的
    4. MATLAB執行個體

      先介紹MATLAB的矩陣(Matrix)和向量(Vector)的賦值方法:在command window的>>符號下輸入:

      一維向量:  = [ 9 7 3 5]



            F = [2, 5, 8, 9, 7, 4, -1, 1]



      二維矩陣: A = [

      64 2 3 61 60 6 7 57

      9 55 54 12 13 51 50 16

      17 47 46 20 21 43 42 24

      40 26 27 37 36 30 31 33

      32 34 35 29 28 38 39 25

      41 23 22 44 45 19 18 48

      49 15 14 52 53 11 10 56

      8 58 59 5 4 62 63 1

      ]



       

      I和F現在就是[例3.1][例3.2]一維向量, A就是3.5.1中的映像矩陣。在進行Haar小波的一維與二維變換(分解)之前,首先介紹一下MATLAB的矩陣運算。

      MATLAB是Matrix Laboratory

      的合寫,它對矩陣運算之功能堪稱一流。由於使用矩陣描述問題更象數學運算式,所以編寫的程式不僅高效,更易讀。所以MATLAB程式應該盡量使用矩陣直接

      描述。 如 M是一4X4的矩陣,則B=I*M就完成了使用兩個for迴圈編寫乘法的程式。

      分析老師的[例3.1],那麼可以得到如下結果:

      [(9+7)*1/2 (3+5)* 1/2 (9-7)*1/2 (3-5)* 1/2]

      如果把其看作矩陣方式的乘法,那麼令 M為其表述求取平均和差值的係數矩陣,則輸入:



      M = [

      1/2 0 1/2 0

      1/2 0 -1/2 0

      0 1/2 0 1/2

      0 1/2 0 -1/2

      ]

      把上述的M輸入到MATLAB中,然後使用:



      C=I*M

      得到的結果就是 [ 8 4 1

      -1]。這就是非正常化Haar小波的第一級分解係數。注意C的前兩項[ 8 4 ] 就是近似係數(Approximation

      Coefficients), 後兩項[1 _1]就是細節係數(Detail Coefficients).

      M就是Haar小波的非正常化(non-normalization)係數矩陣。如果我們執行 :



      M*M_

      (M_代表的是M的轉置矩陣),你會發現得到對角線為0.5其它為0的4X4矩陣,所以如果讓它變成單位矩陣(對角線為1),必須把原來的1/2增大,變為1/sqrt(2), 所以執行:



      N=M*sqrt(2)

      後得到新的係數矩陣

      [ 0.7071 0 0.7071 0

      0.7071 0 -0.7071 0

      0 0.7071 0 0.7071

      0 0.7071 0 -0.7071

      ]

      再執行



      N * N_

      就會得到單位矩陣。N就是Haar小波的正常化(normalization)係數矩陣。現在執行:



      C*M_

      將得到 [4.5 3.5 1.5 2.5],顯然是因為M*M_的對角矩陣的值為0.5。現在使用



      Cn=I*N

      得到 [11.3137 5.6569 1.4142 -1.4142 ] 正常化的一維Haar小波一級分解係數。



      I1=Cn*N_

      得到 [9 3 7 7] 正常化的一維Haar小波逆變換(重構)結果。可見得到這樣正常化矩陣的好處是為了逆變換時不需要額外的運算,只是需要分解係數矩陣乘以正常化係數矩陣的轉置。

      如果需要對分解係數矩陣進行第2級分解,那麼此時只對C或Cn的前2項的低頻係數進行,此時的Haar的非正常化與正常化係數矩陣M1和N1分別為:



      M1=[

      1/2 1/2

      1/2

本文轉自

http://kekewutao.blog.hexun.com/6504696_d.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.