opencv3 C 離散余弦變換DCT

2021-08-18 00:15:39 字數 1815 閱讀 2968

離散余弦變換/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...