opencv3/C++ 離散余弦變換DCT方式
離散余弦變換/Discrete cosine transform,
根據(jù)離散傅里葉變換的性質(zhì),實偶函數(shù)的傅里葉變換只含實的余弦項,而數(shù)字圖像都是實數(shù)矩陣,因此構(gòu)造了一種實數(shù)域的變換——離散余弦變換(DCT)。
離散余弦變換具有很強的”能量集中”特性,左上方稱為低頻數(shù)據(jù),右下方稱為高頻數(shù)據(jù)。而大多數(shù)的自然信號(包括聲音和圖像)的能量都集中在離散余弦變換后的低頻部分。因此也可以在圖像壓縮算法中用來進行有損壓縮。(如JPEG壓縮編碼)
OpenCV中dct()
在OpenCV中有專門進行離散余弦變換的函數(shù)dct()。
dct()函數(shù)執(zhí)行1D或2D浮點數(shù)組的正向或反向離散余弦變換(DCT):
N個元素的一維向量的正余弦變換:

該函數(shù)通過查看輸入數(shù)組的標志和大小來選擇操作模式:
如果(flags&DCT_INVERSE)== 0,則函數(shù)執(zhí)行向前的1D或2D變換。否則是一個逆1D或2D變換。
如果(flags&DCT_ROWS)!= 0,則函數(shù)執(zhí)行每行的一維變換。
如果數(shù)組是單列或單行,則該函數(shù)執(zhí)行一維變換。
如果以上都不是,則該函數(shù)執(zhí)行2D變換。
目前dct支持偶數(shù)大小的數(shù)組(2,4,6 …)。對于數(shù)據(jù)分析和逼近,可以在必要時填充數(shù)組。另外,函數(shù)性能對數(shù)組大小的依賴性非常大,而不是單調(diào)的。在當前實現(xiàn)中,大小為N的矢量的DCT通過大小為N / 2的矢量的DFT來計算。因此,最佳DCT大小N1 > = N可以計算為:
size_t getOptimalDCTSize(size_t N){return 2 * getOptimalDFTSize((N + 1)/ 2); }
N1 = getOptimalDCTSize(N);
dct()參數(shù)
src 輸入浮點數(shù)組。
dst 輸出與src大小和類型相同的數(shù)組。
flags 轉(zhuǎn)換標志
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;
}
可以看到因為第一幅圖像的細節(jié)較少,因此DFT變換數(shù)據(jù)主要集中在左上方(低頻區(qū)域),高頻區(qū)域大部分為0:


而第二幅圖像相對而言具有較為豐富的細節(jié),因此相對于第一幅圖像中間區(qū)域出現(xiàn)了大量的非0值:


以上這篇opencv3/C++ 離散余弦變換DCT方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言小項目計時器的實現(xiàn)思路(倒計時+報警提示)
這篇文章主要介紹了C語言小項目計時器(倒計時+報警提示)的實現(xiàn)思路,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11
C/C++?string.h庫中memcpy()和memmove()的使用
memcpy與memmove的目的都是將N個字節(jié)的源內(nèi)存地址的內(nèi)容拷貝到目標內(nèi)存地址中,本文主要介紹了C/C++?string.h庫中memcpy()和memmove()的使用,感興趣的可以了解一下2023-12-12
Qt 使用 canon edsdk 實現(xiàn)實時預覽的示例代碼
這篇文章主要介紹了Qt 使用 canon edsdk 實現(xiàn)實時預覽的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11

