图像处理中的通信原理——冈萨雷斯读书笔记(二)
參考伯樂在線的一篇文章,做圖像的傅里葉變換。在PyCharm中安裝cv2時出錯,如下圖:
根據提示建議在命令行中執行命令pip install cv2也依然是No matching distribution found for cv2.注意到pip可以更新,但這不是問題所在。然而,將相同的py文件添加在venv文件夾中沒有在import時報錯。venv是virtual environment的縮寫。查到的資料是這樣的:每個應用需要的運行環境經常不同(包的版本/python版本等),所以需要用virtualenv創建一套屬于這個程序的“隔離”的Python運行環境。而且系統Python環境不會被修改,保持干凈。可打包后移動目錄,但無法跨平臺。注意當前項目的python解釋器是哪個,一定要設置成虛擬環境中的python。virtualenv 創建的虛擬環境與主機的 Python 環境完全無關, 你主機配置的庫不能在 virtualenv 中直接使用。 你需要在虛擬環境中利用 pip install 再次安裝配置后才能使用。
注意到解釋器也根據工程有不同的版本,區別在安裝了哪些模塊。當在venv中換了一個解釋器,cv2依然安裝失敗,但程序的結果正確。
上面的代碼中提到將頻譜中心移動。具體操作通常在進行傅里葉變換之前用(-1)^(x+y)乘以輸入的圖像函數,這樣就可以將傅里葉變換的原點F(0,0)移到(M/2,N/2)上。將頻譜移頻到圓心除了可以清晰地看出圖像頻率分布以外,還有一個好處,它可以分離出有周期性規律的干擾信號,比如正弦干擾,一副帶有正弦干擾,移頻到原點的頻譜圖上可以看出除了中心以外還存在以某一點為中心,對稱分布的亮點集合,這個集合就是干擾噪音產生的,這時可以很直觀的通過在該位置放置帶阻濾波器消除干擾.
傅里葉變換的本質是將信號分解為一系列正弦曲線的疊加。正弦曲線有三個屬性:頻率;幅值;相位。我們看到傅里葉變換的每一項(對每對頻率u,v,F(u,v)的值)是由f(x)函數所有值的和組成。f(x)的值與各種頻率的正弦值和余弦值相乘。如果正好有相同的頻率分量,相乘得一個值,即幅度。如果沒有特定的頻率分量,乘積就應該是0,其實傅里葉變換就是一個正交變換。
幅值描述了對比度,圖像最亮處和最暗處的的差值。在頻譜中由亮度表示,亮度越高表示對比度越大。
頻率是空域上亮度改變的頻率。傅里葉變換得到的頻譜,頻率從0到奈奎斯特頻率(數字圖像可被編碼的最高頻率,與分辨率、像素大小有關)。頻率為0的分量就是直流DC分量,因為亮度不可能取負數,所以所有的圖像的直流分量都不為0.
相位代表正弦曲線相對于原始狀態是如何移動的(偏移量)。
頻譜圖中心點表示DC直流分量,頻譜圖以中心點中心對稱。如下圖,雖然只有一種頻率分量,但卻有三個亮點。截圖來自參考鏈接1,鏈接1給的圖是gif格式的,查了一下才知道gif其實也是一種無損壓縮格式,GIF(Graphics Interchange Format)的原義是“圖像互換格式”,只不過可以將多幅圖像保存到同一個文件中的特點使它在逐幅圖像讀取到屏幕上時可以顯示為動圖。剛才的程序直接讀取gif文件和后綴改為jpg的都報錯,openCV不支持gif的解碼(好像是因為gif中LZW算法專利的原因),可以用第三方庫FreeImage讀取,這里我用了截圖軟件才將頻譜畫出來,如下面的右半邊,但是和剛才的分析和左邊的實驗結果不同,右邊的圖是一條直線,且頻譜圖的“背景色”是白色。當用如上的matlab畫頻譜圖時,顏色與python畫出的圖正好相反。斷點調試發現其中fimg變量出現大量的-inf,造成了“背景”全白,同時注意到控制臺出現提示divid by zero,判斷出是在取對數過程中造成了負無窮,根matlab一樣在取對數之前+1進行修正,即得到了和matlab一樣的結果。opencv也支持圖像傅里葉變換,感興趣可以戳這里。
既然“背景色”的問題已經解決了,還有一個問題是自己頻譜的實驗結果是一條線而Fouier Transform是三個點。參考鏈接在最后其實就是在解釋這個問題,其實這就是“振鈴效應”,也就是“吉伯斯現象”。仔細觀察其實輸入的黑白條紋圖是漸變的,那么它是按照什么規律漸變的呢,答案就是正余弦函數,如果完全按照余弦函數漸變,它對應的頻譜就是一個單頻點,考慮到正負對稱和直流分量就是三個點。這里我一開始每注意到漸變的因素,因為只要是間隔一樣即只存在一個頻率,還給正科解釋錯了。
但是,當黑白條紋沒有做到像余弦函數一樣平滑時頻譜會怎么樣呢,極端一點,我們考慮完全沒有漸變的黑白條紋,黑條白條之間沒有過渡,這對應一維的矩形。我們知道矩形需要無窮多個余弦函數才能擬合,而且需要很多的高頻分量,在二維的黑白跳變的圖像中,它的頻譜就無窮多個“三點”的集合。如下圖,從1到7,條紋越來越密集,頻率也越來越大(分別是基準頻率的3、5、7倍),對應的頻譜中點的坐標值也越來越大,間隔越來越大。當把不同頻率的條紋圖疊加起來,它們的頻譜也是對應頻譜的疊加。可以觀察到,隨著高頻分量的疊加,條紋亮度圖中間的白條越來越突出,其他地方越來越成為黑色的背景,頻譜圖也越來越接近于一條直線。事實上,這就解釋了最后一幅圖的頻譜圖為什么是一條直線。
再分析上面兩種頻譜。左邊的頻譜看似有四條線,其實只是兩條垂直的線,分別代表橫向的亮度變化和縱向的亮度變化,但是都不經過中心點,是因為原圖帶來的相位偏移。結合右邊的情況,頻譜與亮度變化發生的具體位置是無關的。
看,只是最熟悉的傅里葉變換在實際運用在離散、二維情況下都出了這么多情況,就像正科的老師說的,越讀書會越覺得什么都不會。紙上得來終覺淺啊,繼續努力!
Reference:
1.http://cns-alumni.bu.edu/~slehar/fourier/fourier.html#filtering
2.https://blog.csdn.net/abcjennifer/article/details/7622228
3.http://blog.jobbole.com/94144/
4.https://blog.csdn.net/keith_bb/article/details/53389819
總結
以上是生活随笔為你收集整理的图像处理中的通信原理——冈萨雷斯读书笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Pycharm操作和配置指南》这些不会
- 下一篇: 链表简单实现(增删查改)