我已經使用規則卷積實現了高斯模糊的當前實現。 對於小型內核,它是有效的,但一旦內核大小變大,性能就會得到一個擊中。 所以我想用FFT來實現卷積。 我從來沒有關於FFT相關圖像處理的經驗,所以我有幾個問題。
基於 2D的卷積也可以分為兩個卷積?在每行上,true FFT FFT FFT FFT FFT FFT FFT FFT multiply multiply multiply multiply kernel kernel,每列的逆變換和每行的逆變換都是如此。 還是我必須在每次 1D 變換後用 1D 個內核進行乘法運算?
現在我知道內核的大小應該與( 1 D的行)的大小相同。 但它會如何影響邊緣? 我必須用零填充圖像邊緣? 如果是這樣,那麼內核大小應該等於padding之前或者之後的圖像大小?
此外,這是一個 C++ 項目,我計劃使用 kissFFT,因為這是一個商業項目。 歡迎你推薦任何更好的方案。 謝謝你。
編輯:感謝你的回復,但我還有幾個問題。
我看到輸入圖像的虛部分都是零。 但是輸出的虛數部分也將為零? 我必須把高斯核和實部和虛部相乘?
我有相同圖像的實例模糊在不同的尺度,換句話說,相同的圖像被縮放到不同的尺寸和模糊。 每次縮放圖像或者使用相同的FFT時,我都必須執行 FFT 。
最後,如果我想可以視化 FFT,我知道一個日誌濾波器必須應用於 FFT 。 但是我真的迷失了,那部分應該用來可視化 FFT? 實部分或者虛部分。
還有一個大小 512 x512的圖像,它將是真實和虛擬部分的大小。 他們的長度是一樣的?
感謝你的詳細回復。