離散余弦變換/discrete cosine transform,
根據離散傅利葉變換的性質,實偶函式的傅利葉變換只含實的余弦項,而數字影象都是實數矩陣,因此構造了一種實數域的變換——離散余弦變換(dct)。
離散余弦變換具有很強的」能量集中」特性,左上方稱為低頻資料,右下方稱為高頻資料。而大多數的自然訊號(包括聲音和影象)的能量都集中在離散余弦變換後的低頻部分。因此也可以在影象壓縮演算法中用來進行有失真壓縮。(如jpeg壓縮編碼)
opencv中dct()
在opencv中有專門進行離散余弦變換的函式dct()。
dct()函式執行1d或2d浮點陣列的正向或反向離散余弦變換(dct):
n個元素的一維向量的正余弦變換: y=
c(n)
⋅xy =c
(n)⋅
x此處 c(
n)jk
=αj/
n−−−
−−√cos(π
(2k+
1)j2
n)c jk
(n)=
αj/n
cos(π
(2k+
1)j2
n);αj=2
α j=
2, j>
0 j
>
0該函式通過檢視輸入陣列的標誌和大小來選擇操作模式:
目前dct支援偶數大小的陣列(2,4,6 …)。對於資料分析和逼近,可以在必要時填充陣列。另外,函式效能對陣列大小的依賴性非常大,而不是單調的。在當前實現中,大小為n的向量的dct通過大小為n / 2的向量的dft來計算。因此,最佳dct大小n1 > = n可以計算為:
size_t getoptimaldctsize(size_t n)
n1 = getoptimaldctsize(n);
dct()引數
opencv示例
#include
#include
#include
#include
using
namespace
std;
using
namespace cv;
int main()
resize(src, src, size(512, 512));
src.convertto(src, cv_32f, 1.0/255);
mat srcdct;
dct(src, srcdct);
imshow("src", src);
imshow("dct", srcdct);
waitkey();
return
0;}
可以看到因為第一幅影象的細節較少,因此dft變換資料主要集中在左上方(低頻區域),高頻區域大部分為0:
而第二幅影象相對而言具有較為豐富的細節,因此相對於第一幅影象中間區域出現了大量的非0值:
opencv3 C 離散余弦變換DCT方式
離散余弦變換 discrete cosine transform,根據離散傅利葉變換的性質,實偶函式的傅利葉變換只含實的余弦項,而數字影象都是實數矩陣,因此構造了一種實數域的變換 離散余弦變換 dct 離散余弦變換具有很強的 能量集中 特性,左上方稱為低頻資料,右下方稱為高頻資料。而大多數的自然訊號...
離散余弦變換 C 實現
理論 影象處理中常用的正交變換除了傅利葉變換外,還有其他一些有用的正交變換,其中離散余弦就是一種。離散余弦變換表示為dct discrete cosine transformation 常用於影象處理和影象識別等。2 式中f u 是第u個余弦變換係數,u是廣義頻率變數,u 1,2,3.n 1 f x...
opencv3 C 單目標跟蹤
opencv3的tracking部分在opencv contrib中,需要用cmake對其進行編譯後才能使用。create 通過名稱建立乙個 create const string trackertype 要使用的 演算法的名稱。init 使用圍繞目標的邊界框初始化 init const mat i...