曉查 發自 凹非寺 量子位 報道 | 公眾號 QbitAI無論是處理聲音和圖像信號,都必須用到傅立葉變換。其實除瞭這些“正經”用途,它還能做一些有意思的事情。最近,一位名叫Jez Swanson的谷歌工程師自己寫瞭篇博客,教你用傅立葉變換畫出任何簡筆畫。目前已在Twitter已經收獲瞭3000+點贊。什麼是傅立葉變換簡而言之,傅裡葉變換是將某些東西分解成一系列正弦波,而正弦波是最簡單的周期函數。我們先從一些簡單的例子開始,比如下面的波形可以分解成兩個正弦波。反過來說,傅裡葉變換也是組合波形的一種方式。把這兩個正弦波疊加起來,就得到上方的波形。即使是看起來並不平滑的方波,也能分解成正弦波。但是方波和前面波形不同,它在進行疊加操作的時候會有困難。因為方波的成分包含無數正弦波。但是在現實世界中,我們不可能能疊加無限多的波形。如果我們截取其中主要的部分,就能得到近似的方波波形。隨著高頻的成分越來越多,圖形也會越來越接近方波。接下來,我們在互動頁面上隨便畫出一個波形,通常計算機會離散地記錄下波形上一些點的數值,然後對它們做傅立葉變換,最終得到的波形與原始波形非常相似這也是計算機處理聲音的方式,MP3文件就是這麼做的。通常計算機會把聲波存儲為一系列點,點的密集程度決定瞭舍棄掉多高的頻率。電腦隻存儲那些前面低頻部分,忽略聲音裡的高頻,這就是MP3壓縮的原理。從三維角度理解上面簡單介紹瞭傅立葉變換的基本知識。如果你學過一點三角函數的知識,就知道正弦波其實和圓有密切的關系。我們一邊畫圓,一邊讓繪制點隨著時間前進,就得到在三維空間中的螺旋線圖像。它從側面來看就是正弦波:疊加的“輪子”既然正弦波可以理解成圓周運動的投影,那麼傅立葉變換就可以理解成不同圓周運動的疊加。每個輪子的轉速代表著頻率,輪子的半徑代表著振幅。理解瞭以上內容,我們就可以用“三維正弦波”做一些有趣的事情,比如畫一個勝利手勢:在三維角度看,它是這樣的:我們可以將簡筆畫視為一個3D圖形。想象一個人正在畫一隻手,那麼這3D圖形就代表瞭筆尖位置的變化。x、y維度代表筆尖位置,z維度代表筆尖所在的某個時刻。在這裡,我們使用的是3D螺旋正弦波的組合,來得到我們的圖像。當我們從正面觀察這個3D圖像時,就會看到許多圓圈的疊加運動。我們把一個圓圍繞另一個圓旋轉叫做“本輪”(epicycle)。和前面疊加出方波一樣。我們隻用幾個圓圈就可以很好地逼近簡筆畫。前面的大圓確定圖像的大致形狀,而最後的小圓讓邊緣更銳利。作者Jez已經把它做成Demo放在網站上試玩,還用它畫瞭一幅自畫像。△作者自畫像的傅立葉變換最後奉上Jez本人照片:自己動手如果你覺得很酷炫,可以去Jez的個人博客網站去嘗試。http://www.jezzamon.com/fourier/index.html他還公佈瞭交互部分的源代碼。這些交互元素大部分是用JS編寫的。另外Jez還簡單介紹瞭傅立葉變換是如何用於JPEG圖像壓縮的,這部分內容使用瞭Python和Jupyter Notebook。並把說明文檔放在瞭Python文件夾中。如果你想折騰JPEG圖像壓縮原理的部分,還需要安裝Jupyter,以及NumPy,PIL,SciPy和Matplotlib。學習資料Jez這篇博客的介紹還是非常簡略的,即使你完全沒有數學基礎也能上手。如果想更深入的學習傅立葉變換,Jez也給出瞭更多學習教程。傅立葉變換的交互式學習指南:https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/數學播客“3Blue1Brown”的視頻教程:http://www.bilibili.com/video/av19141078/— 完 —誠摯招聘量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復“招聘”兩個字。量子位 QbitAI · 頭條號簽約作者վ’ᴗ’ ի 追蹤AI技術和產品新動態
本文出自快速备案,转载时请注明出处及相应链接。