【MATLAB】离散余弦变换滤波算法(DCT)

简介: 之前介绍的所有滤波算法都是空间域滤波算法(即2D滤波算法)。离散余弦变换滤波算法(DCT)属于频率域滤波算法(即3D滤波算法)。

时间域相对于空间域增加了一个时间维度,可以对不同时间段的图像进行处理,对时域噪声有很好的抑制作用。而频率域又是一个全新的维度,换个角度看问题,将图像转换到频域,高频部分代表图像的细节、纹理信息,低频部分代表图像的轮廓信息,可以再特定的“频率”范围内对图像进行处理,就像是用显微镜看图像一样,能挖掘图像更加广阔的信息。

344ec2820c234846b5a84c90c49cd495.jpg

在图像处理中,图像为离散二维矩阵,所以算法都是离散形式。离散余弦变换是一种频率域转为到空间域的数学工具(函数),它为频率域与空间域架起一座桥梁。离散余弦变换是离散傅里叶变换(DFT)的一种特殊形式,特殊点就在于其原始变换信号是一个实偶函数。DCT变换较DFT变换具有更好的频域能量聚集度,那么对于那些不重要的频域区域和系数就能够直接裁剪掉,因此,DCT变换非常适合于图像压缩算法的处理,例如现在大名鼎鼎的jpeg就是使用了DCT作为图像压缩算法。

09c70c747c7346f28809ed4e3b782f93.png

离散余弦变换,本质上是一种数学方法。它与傅立叶变换,小波变换,超小波变换,这些变换本质都是一种基变换,对于不同的系统,不同的研究对象,我们可以选取不同的基来让研究和分析变得更加简单。比如因为复指数信号是线性时不变系统的特征函数,因此我们在研究线性时不变系统及其特性时通常采用傅立叶变换,选取了一组好的基,可以让问题变得简单,比如我们的现在机器学习里很多的降维算法,像PCA,K-L变换也是基变换,对于一些基可能会出现很多很小的系数,或者是零系数,这要用这组基去表示这一信号或者向量时也就更加的简洁,而越是简洁就越于分析。

eb35d7496525403aa1adb3bf272ea5de.png

二维DCT变换公式如下:

73078b41f21949669f885df05091b931.png

  由公式我们可以看出,上面只讨论了二维图像数据为方阵的情况,在实际应用中,如果不是方阵的数据一般都是补齐之后再做变换的,重构之后可以去掉补齐的部分,得到原始的图像信息,这个尝试一下,应该比较容易理解

      另外,由于DCT变换高度的对称性,在使用Matlab进行相关的运算时,我们可以使用更简单的矩阵处理方式:

be44a7546e854678bda3efc037835d2e.png

DCT变换与IDCT变换,MATLAB代码实现:

clear;
clc;
% 正变换X=round(rand(4)*100)   %产生随机矩阵A=zeros(4);
fori=0:3forj=0:3ifi==0a=sqrt(1/4);
elsea=sqrt(2/4);
endA(i+1,j+1)=a*cos(pi*(j+0.5)*i/4);
endendY=A*X*A'%DCT变换%反变换fori=0:3forj=0:3ifi==0a=sqrt(1/4);
elsea=sqrt(2/4);
endA(i+1,j+1)=a*cos(pi*(j+0.5)*i/4); %生成变换矩阵endendX1=A'*Y*A%DCT反变换恢复的矩阵% Matlab版YY=dct2(X)      %Matlab自带的dct变换XX=idct2(YY)    %Matlab自带的idct逆变换

因为噪声主要存在于高频信息中,对高频信息进行适当抑制,可以起到图像去噪的作用,这里采用简单高频抑制方法,可以降噪但也会丢失细节,中间处理的方法还有很多就不一一列举,MATLAB代码如下:

%读取图像X=imread('lena.jpg'); 
X=rgb2gray(X);
%读取图像尺寸[m,n]=size(X); 
%给图像加噪Xnoised=imnoise(X,'gaussian',0.01); 
%输出加噪图像subplot(121); 
imshow(Xnoised);
%DCT变换Y=dct2(Xnoised); 
I=zeros(m,n);
%高频抑制I(1:m/3,1:n/3)=1; 
Ydct=Y.*I;
%逆DCT变换Y=uint8(idct2(Ydct)); 
%结果输出subplot(122);
imshow(Y);

c77837f3a0af486d8d365c9373353dfd.png

目录
相关文章
|
7天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
13天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
9天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
6天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。
|
10天前
|
算法
通过matlab分别对比PSO,反向学习PSO,多策略改进反向学习PSO三种优化算法
本项目使用MATLAB2022A版本,对比分析了PSO、反向学习PSO及多策略改进反向学习PSO三种优化算法的性能,主要通过优化收敛曲线进行直观展示。核心代码实现了标准PSO算法流程,加入反向学习机制及多种改进策略,以提升算法跳出局部最优的能力,增强全局搜索效率。
|
6天前
|
算法
通过matlab对比遗传算法优化前后染色体的变化情况
该程序使用MATLAB2022A实现遗传算法优化染色体的过程,通过迭代选择、交叉和变异操作,提高染色体适应度,优化解的质量,同时保持种群多样性,避免局部最优。代码展示了算法的核心流程,包括适应度计算、选择、交叉、变异等步骤,并通过图表直观展示了优化前后染色体的变化情况。
|
3天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
9天前
|
算法 5G 数据安全/隐私保护
基于MIMO系统的PE-AltMin混合预编码算法matlab性能仿真
本文介绍了基于交替最小化(AltMin)算法的混合预编码技术在MIMO系统中的应用。通过Matlab 2022a仿真,展示了该算法在不同信噪比下的性能表现。核心程序实现了对预编码器和组合器的优化,有效降低了硬件复杂度,同时保持了接近全数字预编码的性能。仿真结果表明,该方法具有良好的鲁棒性和收敛性。
23 8
|
10天前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。
|
10天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。