【OpenCV图像处理】七、图像的DCT

DCT变换,也就是离散余弦变换(Discrete Cosine Transform)是图像频域变换的一种,实际上可以看成是一种空域的低通滤波器,DCT也可以看做是傅里叶变换的一种特殊情况。在傅里叶级数中,如果被展开的函数是实偶函数,那么在傅里叶级数中则只包含余弦项,再将其离散化,由此便可导出离散余弦变化。

目前,离散余弦变换以及它的改进算法已经成为广泛应用于信号处理和图像处理,特别是用于图像压缩和语音压缩编解码的重要工具和技术。这是由于DCT具有很强的“能量集中”的特性,大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,DCT的作用是吧图像中点和点间的规律呈现出来,虽然DCT本身并没有压缩作用,但是却为以后压缩时的“取舍”奠定了必不可少的基础。

离散余弦变换在某种程度上与离散傅里叶变换有写类似,但是与DFT不同的是DCT只使用实数部分,DFT需要计算的是复数而非实数,而进行复数运算通常比计算实数运算费时得多,所以DCT相当于一个长度是其二被的DFT,从形式上看,DCT是一个线性的可逆函数。

下面先简单介绍一下DCT的数学基础

一维的DCT的正变换公式如下:




其中,F(u)是第u个DCT变换的系数,f(x)是时域中的N点的序列,x=0,1,2...,N-1

二维图像的DCT变换形式为:


其中,f(x,y)为空域中的二维向量,x=0,1,2....M-1;y = 0,1,2...,N-1;F(u,v)为变换系数矩阵

使用OpenCV进行简单的实现程序如下:

//实现二维图像的DCT

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
	
	Mat srcImage = imread("2345.jpg");
	if (!srcImage.data)
	{
		cout << "读入图像出错" << endl;
		return -1;
	}
	imshow("原图像", srcImage);
	int height = srcImage.rows;
	int width = srcImage.cols;

	//从BGR空间转换到YUV颜色空间
	Mat yuvImage(srcImage.size(), CV_8UC3);
	cvtColor(srcImage, yuvImage, CV_BGR2YUV);
	//定义输出图像
	Mat dstImage(srcImage.size(), CV_64FC3);

	//分割YUV三个通道
	vector<Mat> channels;
	split(yuvImage, channels);

	//提取YUV颜色各个通道的值
	Mat y = channels.at(0);	imshow("Y", y);
	Mat u = channels.at(1); imshow("U", u);
	Mat v = channels.at(2); imshow("V", v);

	//定义DCT系数的三个通道
	Mat DCTY(srcImage.size(), CV_64FC1);
	Mat DCTU(srcImage.size(), CV_64FC1);
	Mat DCTV(srcImage.size(), CV_64FC1);

	//进行DCT变换
	dct(Mat_<double>(y), DCTY);
	dct(Mat_<double>(u), DCTU);
	dct(Mat_<double>(v), DCTV);

	channels.at(0) = Mat_<uchar>(DCTY);
	channels.at(1) = Mat_<uchar>(DCTU);
	channels.at(2) = Mat_<uchar>(DCTV);

	merge(channels,dstImage);

	imshow("DCT图像", dstImage);

	waitKey();
	return 0;
}






评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值