国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

opencv3/C++ 離散余弦變換DCT方式

2020-01-26 13:22:51
字體:
來源:轉載
供稿:網友

離散余弦變換/Discrete cosine transform,

根據離散傅里葉變換的性質,實偶函數的傅里葉變換只含實的余弦項,而數字圖像都是實數矩陣,因此構造了一種實數域的變換――離散余弦變換(DCT)。

離散余弦變換具有很強的”能量集中”特性,左上方稱為低頻數據,右下方稱為高頻數據。而大多數的自然信號(包括聲音和圖像)的能量都集中在離散余弦變換后的低頻部分。因此也可以在圖像壓縮算法中用來進行有損壓縮。(如JPEG壓縮編碼)

OpenCV中dct()

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

dct()函數執行1D或2D浮點數組的正向或反向離散余弦變換(DCT):

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

該函數通過查看輸入數組的標志和大小來選擇操作模式:

如果(flags&DCT_INVERSE)== 0,則函數執行向前的1D或2D變換。否則是一個逆1D或2D變換。

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

如果數組是單列或單行,則該函數執行一維變換。

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

目前dct支持偶數大小的數組(2,4,6 …)。對于數據分析和逼近,可以在必要時填充數組。另外,函數性能對數組大小的依賴性非常大,而不是單調的。在當前實現中,大小為N的矢量的DCT通過大小為N / 2的矢量的DFT來計算。因此,最佳DCT大小N1 > = N可以計算為:

size_t getOptimalDCTSize(size_t N){return 2 * getOptimalDFTSize((N + 1)/ 2); }N1 = getOptimalDCTSize(N);

dct()參數

src 輸入浮點數組。

dst 輸出與src大小和類型相同的數組。

flags 轉換標志

opencv示例

#include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp>#include <opencv2/core/mat.hpp>#include <iostream> using namespace std; using namespace cv; int main(){ Mat src = imread("E://image//sophie.jpg", 0);  if(src.empty()) {  cout << "the image is not exist" << endl;   return -1; } 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方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉定区| 青海省| 延川县| 乾安县| 襄城县| 南昌市| 莱州市| 监利县| 东乌珠穆沁旗| 神农架林区| 常山县| 瑞丽市| 双江| 莱州市| 崇左市| 通州市| 莱阳市| 彭泽县| 五莲县| 辰溪县| 鄂伦春自治旗| 尉犁县| 天水市| 长治市| 日土县| 噶尔县| 绵竹市| 乐山市| 商水县| 隆尧县| 万山特区| 墨玉县| 高邮市| 吉安县| 富蕴县| 丰原市| 靖边县| 南漳县| 牡丹江市| 高唐县| 阿克|