2009-02-26 24 views
4

我一直在閱讀一些關於消除鋸齒的問題,它似乎有道理,但有一點我不太確定。您究竟如何找到信號的最大頻率(在圖形方面)。抗鋸齒:確定最大頻率的首選方法?

我意識到有多個案例,所以我假設有多個答案。但首先讓我說出一個簡單的算法,我認爲這個算法會代表最大頻率,所以有人可以告訴我,如果我將其概念化爲錯誤的方式。

假設這是針對1維,有限和灰度圖像(以像素爲單位)。我是否正確地假設您可以簡單地掃描整個像素線(在空間域中)尋找一個最小振盪,並且最小振盪的倒數是最大頻率?

防爆值{23,26,28,22,48,49,51,49}

頻率:用於修飾設置{}

(1/2)= 0.5:{28, 22}

(1/4)= 0.25:{22,48,49,51}

所以將0.5是最高頻率?

什麼是理想的方式來計算一個像上面那樣的像素線?

並且在更理論上說明,如果您的採樣輸入是無限的(更像現實世界)呢?一個有效的過程是這樣的:

Predetermine a decent interval for point sampling 
Determine max frequency from point sampling 
while(2*maxFrequency > pointSamplingInterval) 
{ 
pointSamplingInterval*=2 
Redetermine maxFrequency from point sampling (with new interval) 
} 

我知道這些算法充滿效率低下,所以什麼是一些首選的方法? (不尋找一些瘋狂優化,只是從根本上更好的概念)

回答

2

接近正確的方法是使用傅立葉變換(在實踐中,FFT,或快速傅里葉變換

理論的工作原理如下:如果你有一個鑲有彩色/灰度像素,那麼我們可以說圖像由「空間域」中的像素表示;也就是說,每個單獨的數字指定特定空間位置處的圖像。

但是,我們真正想要的是在「頻域」中表示圖像。每個數字代替指定每個像素的每個單獨數字,代表整個圖像中特定頻率的幅度。

從「空間域」轉換到「頻率域」的工具是傅里葉變換。FT的輸出將是一系列數字,指定不同頻率的相對貢獻。

爲了找到最大頻率,您可以執行FT,並查看您獲得的高頻振幅 - 然後它只是從最高頻率向下搜索,直到您達到「最低顯着性幅度「閾值。

您可以編寫自己的FFT,但在實踐中更容易使用預打包的庫如FFTW

0

我認爲你需要的是傅立葉分析(http://en.wikipedia.org/wiki/Fourier_analysis)的應用。我已經研究過這個,但是從來沒有用過它,所以把它用一小撮鹽,但我相信,如果你正確地將它應用到你的數字集,你會得到一系列頻率,這是該系列的組成部分,然後你可以選擇最高的一個。

我不能指出你這樣做的一段代碼,但我確定它會在某處。

2

你不掃描的最高頻率的信號,然後選擇您的採樣頻率:你選擇一個足夠高的採樣頻率來捕捉你想捕捉的東西,然後你過濾器的信號到刪除高頻率。你在之前丟掉一切高於採樣率一半的採樣率

上午我假設你可以 簡單地掃描整個像素線(在 空間域),尋找一個爲 最小的振盪和 逆是最小的振盪 將是最大頻率是否正確?

如果你有一行像素,那麼採樣已經完成。應用抗混疊濾波器已經太晚了。可能出現的最高頻率是採樣頻率的一半(我想是「1/2px」)。

而且在更多的理論注意,如果有什麼 您的採樣輸入是無限 (更像是真正的世界)?

是的,那是當你使用過濾器。首先,你有一個連續的功能,就像一個真實的圖像(無限採樣率)。然後過濾掉fs/2以上的所有內容,然後在fs處對其進行採樣(將圖像數字化爲像素)。相機實際上並沒有任何過濾,這就是爲什麼你Moire patterns當你的照片磚塊等

alt text

如果你抗鋸齒計算機圖形,你不得不認爲理想的連續數學的功能首先,並考慮如何過濾它並將其數字化以在屏幕上生成輸出。例如,如果你想用計算機產生方波,你不能在最大值和最小值之間天真地交替。這就像抽樣一個真實的生活信號而不先過濾。高次諧波回到基帶,並導致頻譜中出現大量虛假尖峯。您需要生成點,就好像它們是從已過濾的連續數學函數中採樣一樣:

alt text