對於一個小背景,我使用一堆複數值過濾器進行大量圖像過濾。 我分別生成過濾器的實部和虛部(其效率更高),並將它們存儲在兩個獨立的數組中。在OpenCV中,有沒有什麼辦法比cv :: merge和cv :: split更有效地組合/分離圖像通道?
我跟着this guide關於如何在opencv中做dft的。
基本上,我通過我的過濾器必須
- 環
- 通話合併到實部和虛部
- 合併執行DFT
- 呼籲拆分再度分開實部和虛
- 計算響應的大小
我這樣做,它相當慢。我最初認爲我需要一個更快的FFT庫,但是基於Visual Studio的分析器,事實證明cv :: split()和cv :: merge()比實際的DFT所花費的時間多一個數量級。實際上,大部分運行時間都用在了這兩個函數中。
整個拆分/合併的事情對我來說似乎有點多餘,事實上,他們是最耗時的功能是非常煩人的。有沒有更快的方法來做我想做的事情?
感謝您的建議。 就過濾器作爲一個雙通道矩陣開始,我遇到的主要障礙是我需要進行復雜的單元乘法運算來應用濾波器。 一旦你合併,OpenCV沒有任何數字的概念是複雜的,它被視爲只是一個2通道圖像。所以我不得不將它們分開以高效地執行乘法。 – user3765410
那麼你也可以通過使用'cv :: Complex'類型的矩陣去完全不同的路線,你可以直接將它們的數據輸入到libfftw的dct方法中,作爲'fftw_complex'輸出。 – ypnos