opencv3 C 離散余弦變換DCT方式

2022-10-03 23:36:17 字數 1446 閱讀 8358

離散余弦變換/discrete cosine transform,

根據離散傅利葉變換的性質,實偶函式的傅利葉變換只含實的余弦項,而數字影象都是實數矩陣,因此構造了一種實數域的變換——離散余弦變換(dct)。

離散余弦變換具有很強的」能量集中」特性,左上方稱為低頻資料,右下方稱為高頻資料。而大多數的自然訊號(包括聲音和影象)的能量都集中在離散余弦變換後的低頻部分。因此也可以在影象壓縮演算法中用來進行有失真壓縮。(如j程式設計客棧peg壓縮編碼)

opencv中dct()

在opencv中有專門進行離散余弦變換的函式dct()。

dct()函式執行1d或2d浮點陣列的正向或反向離散余弦變換(dct):

n個元素的一維向量的正余弦變換:

該函式通過檢視輸入陣列的標誌和大小來選擇操作模式:

如果(flags&dct_inverse)== 0,則函式執行向前的1d或2d變換。否則是乙個逆1d或2d變換。

如果(flags&dct_rows)!spbde= 0,則函式執行每行的一維變換。

如果陣列是單列或單行,則該函式執spbde行一維變換。

如果以上都不是,則該函式執行2d變換。

目前dct支援偶數大小的陣列(2,4,6 …)。對於資料分析和逼近,可以在必要時填充陣列。另外,函式效能對陣列大小的依賴性非常大,而不是單調的。在當前實現中,大小為n的向量的dct通過大小為n / 2的向量的dft來計算。因此,最佳dct大小n1 > = n可以計算為:

size_t getoptimaldctsize(size_t n)

n1 = getoptimaldctsize(n);

dct()引數

src 輸入浮點陣列。

dst 輸出與src大小和型別相同的陣列。

flags 轉換標誌

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方式

本文位址: /ruanjian/c/292097.html

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...