【matlab 图像处理】离散傅里叶变换&离散余弦变换&K-L变换&小波变换

正交变换是信号处理的一种有效工具。图像信号不仅可以在空间域表示,也可以在频域表示,后者将有利于许多问题的分析及讨论。对图像进行正交变换,在图像增强、图像复原、图像特征提取、图像编码等处理中都经常采用。常用的正交变换有多种,主要有离散傅里叶变换、离散余弦变换、K-L变换,Radon变换和离散小波变换等。

离散傅里叶变换

离散傅里叶变换(Discrete Fourier Transform,DFT)是直接处理离散时间信号的傅里叶变换,在数字信号处理中应用广泛。

FFT(快速傅里叶变换):直接对序列进行DFT,运算量大,很难实时地处理问题。因此,根据DFT的奇、偶、虚、实等特性,对DFT算法进行改进而获得FFT算法。

:基于MATLAB编写程序,实现打开图像﹐对其进行DFT变换并显示频谱图

Image=imread('desert.jpg');%读取图像
grayI=rgb2gray(Image);%将彩色图像灰度化
DFTI1=fft2(grayI);      % 计算离散傅里叶变换
ADFTI1=abs(DFTI1);      % 计算傅里叶谱
top=max(ADFTI1(:));     % 取最大值
bottom=min(ADFTI1(:));  % 取最小值
ADFTI1=(ADFTI1-bottom)/(top-bottom)*100;
ADFTI2=fftshift(ADFTI1);%计算傅里叶变换并移位
subplot(131),imshow(Image),title('原图');%显示原图像
subplot(132),imshow(ADFTI1),title('原频谱图');%显示傅里叶变换频谱图
subplot(133),imshow(ADFTI2),title('移位频谱图');%显示傅里叶变换频谱图
% imwrite(ADFTI1,'dftpinpu2_1.jpg');
% imwrite(ADFTI2,'dftpinpu2_2.jpg');

运行结果:原频谱图中四角部分对应低频成分,中央部分对应高频成分;移位频谱图将频谱图进行移位,频谱图中间部分为低频部分,越靠外边频率越高。图像中的能量主要集中在低频区,高频能量很少或为零。

离散余弦变换在图像处理中的应用

离散余弦变换在图像处理中主要用于对图像(包括静止图像和运动图像)进行有损数据压缩。如静止图像编码标准JPEG、运动图像编码标准MPEG中都使用了离散余弦变换。这是由于离散余弦变换具有很强的“能量集中”特性—大多数的能量都集中在离散余弦变换后的低频部分,压缩编码效果较好。

具体的做法一般是先把图像分成8×8的块,对每一个方块进行二维DCT变换,变换后的能量主要集中在低频区。对 DCT系数进行量化,对高频系数大间隔量化,对低频部分小间隔量化,舍弃绝大部分取值很小或为О的高频数据,降低数据量﹐同时保证重构图像不会发生显著失真。

:编写程序,实现打开图像,对其进行DCT变换并显示频谱图。

Image=imread('cameraman.jpg');%读取图像
imshow(Image);%显示原图像
grayI=rgb2gray(Image);%将彩色图像灰度化
figure,imshow(grayI);
DCTI=dct2(grayI);%计算余弦变换并移位
ADCTI=abs(DCTI);
top=max(ADCTI(:));
bottom=min(ADCTI(:));
ADCTI=(ADCTI-bottom)/(top-bottom)*100;
figure,imshow(ADCTI);%显示余弦变换频谱图
imwrite(ADCTI,'cameramandct.jpg');

运行结果:

:基于MATLAB编程,打开一幅图像,对其进行DCT变换﹔将高频置为0,并讲行反变换

Image=imread('desert.jpg');%读取图像
grayIn=rgb2gray(Image);%将彩色图像灰度化
[h,w]=size(grayIn);
DCTI=dct2(grayIn);%计算dct变换 离散余弦变换
cf=60;
FDCTI=zeros(h,w);  % w x h的空矩阵
FDCTI(1:cf,1:cf)=DCTI(1:cf,1:cf);% 给矩阵赋值
grayOut=uint8(abs(idct2(FDCTI)));% 余弦变换后求傅里叶谱
subplot(121),imshow(Image),title('原图');%显示原图像
subplot(122),imshow(grayOut),title('压缩重建');
% imwrite(grayOut,'peppersidct.jpg');

运行结果:

K-L变换

K-L变换(Karhunen-Loeve Transform)是建立在统计特性基础上的一种变换,又称为霍特林(Hotelling)变换或主成分分析。K-L变换的突出优点是相关性好,是均方误差(Mean Square Error,MSE)意义下的最佳变换,它在数据压缩技术中占有重要地位。

图像K-L变换:将二维图像采用行堆叠或列堆叠的方法转换为一维处理。

:基于MATLAB编写程序,打开人脸图像,对其进行K-L变换,并显示变换结果。

clear,clc,close all;
fmt={'*.jpg','JPEG image(*.jpg)';'*.*','All Files(*.*)'};
[FileName,FilePath]=uigetfile(fmt,'导入数据','face*.jpg','MultiSelect','on');  % 从文件系统中读取图像
if  ~isequal([FileName,FilePath],[0,0])FileFullName=strcat(FilePath,FileName);% 将图像存入到结构体中
else return;
end
N=length(FileFullName);
for k=1:NImage=im2double(rgb2gray(imread(FileFullName{k})));X(:,k) = Image(:);           % 列堆叠,把图像放在矩阵x的第k列
end
[h,w,c]=size(Image);
% %----------- 计算每幅训练图像的与平均脸的差值 -------%
averagex = mean(X')';             %计算图像的平均向量u
X=X-averagex;                     % 求中心化图像向量 B = f - u%-----奇异值分解方法计算协方差矩阵的特征值和特征向量----%
R = X'*X;                   %协方差矩阵为x*x’,这里用奇异值分解
[Q,D] = eig(R);         %V为以特征向量为列的矩阵,D为特征值组成的对角阵
[D_sort,index] = sort(diag(D),'descend');
D=D(index,index);
Q = Q(:,index);             % 按从大到小顺序重排特征值矩阵D和特征向量矩阵Q
P = X*Q*(abs(D))^-0.5;      % 求左奇异矩阵Ptotal = 0.0;
count = sum(D_sort);
for r =1:Ntotal = total + D_sort(r);if total/count > 0.95        %当差异信息比例达到95%时退出循环;取占全部奇异值之和95%的前r个奇异值break;end
end
%-------------测试样本在新空间上投影后的坐标-----------%
KLCoefR = P'*X;
figure; plot(KLCoefR(1,:),KLCoefR(2,:),'ko'),title('K-L变换行压缩');
xlabel('第一主成分得分');ylabel('第二主成分得分');
Y= P(:,1:2)*KLCoefR(1:2,:)+averagex;                     %重建 基于前两个奇异值重建人脸
for j=1:NoutImage=reshape(Y(:,j),h,w);
%     top=max(outImage(:));
%     bottom=min(outImage(:));
%     outImage=(outImage-bottom)/(top-bottom);
%     str=strcat('feaface12_',num2str(j),'.jpg');
%     imwrite(outImage,str);figure,imshow(outImage,[]);
end
Z= P(:,1:r)*KLCoefR(1:r,:)+averagex;                     % 基于前r个奇异值重建人脸图像
for j=1:NoutImage=reshape(Z(:,j),h,w);
%     top=max(outImage(:));
%     bottom=min(outImage(:));
%     outImage=(outImage-bottom)/(top-bottom);
%     str=strcat('feaface1r_',num2str(j),'.jpg');
%     imwrite(outImage,str);figure,imshow(outImage,[]);
end
KLCoefC = X*Q;                  % 使用右奇异矩阵进行K-L变换
for j =1:NoutImage=reshape(KLCoefC(:,j),h,w);
%     top=max(outImage(:));
%     bottom=min(outImage(:));
%     outImage=(outImage-bottom)/(top-bottom);
%     str=strcat('feaface',num2str(j),'.jpg');
%     imwrite(outImage,str);figure,imshow(outImage,[]);
end
%
% 

运行结果:

小波变换

作为重要的数学工具,小波变换被应用到数字图像处理的多个方面,如图像平滑﹑边缘检测、图像分割及压缩编码等。

:利用MATLAB提供的二维离散小波函数实现对cameraman图像的一级、二级分解及重构。

close all,clear,clc;
Image=imread('cameraman.jpg');
subplot(1,3,1),imshow(Image);
grayI=rgb2gray(Image);
[ca1,ch1,cv1,cd1]=dwt2(grayI,'db4');  % 用db4小波对图像进行一级小波分解
DWTI2=[wcodemat(ca1,256),wcodemat(ch1,256);wcodemat(cv1,256),wcodemat(cd1,256)];% 组成小波系数显示矩阵
subplot(1,3,2),imshow(DWTI2/256);    % 显示一级分解后的近似和细节图象
imwrite(DWTI2/256,'dwt1.jpg');
result=idwt2(ca1,ch1,cv1,cd1,'db4');% 一级重构
subplot(1,3,3),imshow(result,[]);   % 重构图像显示% 二级分解
Image=imread('cameraman.jpg');
grayI=rgb2gray(Image);
[c,s]=wavedec2(grayI,2,'db4');      % 用db4小波对图像进行二级小波分解
ca2=appcoef2(c,s,'db4',2);          % 提取二级小波分解低频变换系数
[ch2,cv2,cd2] = detcoef2('all',c,s,2);% 提取二级小波分解高频变换系数
[ch1,cv1,cd1] = detcoef2('all',c,s,1);% 提取一级小波分解高频变换系数
ca1=[wcodemat(ca2,256),wcodemat(ch2,256);wcodemat(cv2,256),wcodemat(cd2,256)];
k=s(2,1)*2-s(3,1);                  % 两级高频系数长度差
ch1=padarray(ch1,[k k],1,'pre');
cv1=padarray(cv1,[k k],1,'pre');
cd1=padarray(cd1,[k k],1,'pre');    % 填充一级小波高频系数数组,使两级系数维数一致
DWTI2=[ca1,wcodemat(ch1,256);wcodemat(cv1,256),wcodemat(cd1,256)];
subplot(1,2,1),imshow(DWTI2/256),title('二级分解');    % 显示二级分解后的近似和细节图像
% imwrite(DWTI2/256,'dwt2.jpg');
result= waverec2(c,s,'db4');        % 二级重构
subplot(1,2,2),imshow(result,[]),title('二级重构'); % 重构图像显示
% imwrite(result/256,'redwt2.jpg');

运行结果:

【matlab 图像处理】离散傅里叶变换离散余弦变换K-L变换小波变换相关推荐

  1. 【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

    fft2()  傅里叶正变换 fftshift()  频谱搬移-直流量(f=0)搬移至频谱中心 I=imread('exp2.tif'); %读入原图像 I1=I(:,:,1:3); %四通道转为三通 ...

  2. matlab k l变换题目,K-L变换及例题技术分析.ppt

    第7章 基于K-L展开式的特征提取 7.1 K-L变换的定义与性质 7.2 K-L变换特征提取的原理及应用 7.3 利用K-L变换进行人脸识别 实现特征提取的途径 考虑利用线性变换的方式实现降维 本质 ...

  3. matlab离散傅立叶变换的应用,离散傅里叶变换 - MATLAB Simulink - MathWorks 中国

    离散傅里叶变换 离散傅里叶变换(即 DFT)是数字信号处理的首要工具.该产品的基础是快速傅里叶变换 (FFT),这是一种可减少执行时间的 DFT 计算方法.许多工具箱函数(包括 Z 域频率响应.频谱和 ...

  4. 【音频处理】离散傅里叶变换

    前言 最近复现音乐驱动舞蹈的文章<Dancing-to-Music Character Animation>,用到了与傅里叶变换很相似的称为常Q变换的方法去分割音乐,所以对傅里叶变换做了一 ...

  5. 如何理解离散傅里叶变换(一)实数形式傅里叶变换

    如何理解离散傅里叶变换(一) --实数形式傅里叶变换 ------------------------------------------------------------------------- ...

  6. 【量化投资】离散傅里叶变换求数组周期

    好久没有更新量化分析相关的内容,本节将介绍如何通过傅里叶变换求解一组数据当中可能存在的周期性,后续将应用本节的结果实际在量化程序中进行应用.本文计算方法不一定正确,欢迎大家多多指正,并在评论区进行交流 ...

  7. 单变量离散傅里叶变换DFT原理及实现

    一.单变量离散傅里叶变换 离散傅里叶变换公式: 根据公式,单变量离散傅里叶变是换将一维数组变换为傅里叶频率.设定一个大小为N的数组,t为X轴上的变量,取值为[0,n-1],f(t)为t=x出的值,计算 ...

  8. 时间序列学习 经典案例(3)离散傅里叶变换DFT(案例:时序去噪)

    1.傅里叶定理 法国科学家傅里叶提出,任何一条周期性曲线,无论多么跳跃或不规则,都能表示成一组光滑正弦曲线叠加之和. 2.离散傅里叶变换 离散傅里叶变换即是把 一条周期性曲线 拆解成 一组光滑正弦曲线 ...

  9. 【六更完结!由于字数限制开新文章继续】零基础信号与系统学习笔记:复指数信号、傅里叶级数的系数推导、三角函数正交性、离散傅里叶变换、相位补偿、z变换表、逆变换表、常见序列及其作用

    零基础信号与系统学习笔记:复指数信号.傅里叶变换.三角函数正交性 基础1:复指数信号 复指数信号基础知识 复指数信号推导1 虚指数信号 虚指数信号特性和作用 直流信号 基础2:傅里叶级数 推导傅里叶级 ...

最新文章

  1. 【任务脚本】更新京东任务东东农场脚本,京东种水果脚本,京东活动任务半自动程序...
  2. Exchange EMC打开出错 解决
  3. python多进程打印字符,加锁(Lock加锁)
  4. I2C总线之(三)---以C语言理解IIC
  5. ValueError: invalid literal for int() with base 10:Python报错及其解决办法
  6. 架构设计:数据服务系统0到1落地实现方案
  7. Android笔记——Windows环境下Android Studio v1.0安装教程
  8. ios 扫码枪外设 键盘模式_苹果iOS 13新增滑行键入功能 开启新键盘模式
  9. Jrebel实现tomcat热部署,遇到的问题以及解决办法,详解
  10. Linux shell脚本sed使用
  11. 时空幻境-patch
  12. 360浏览器html在哪儿,360浏览器打印页面设置在哪里
  13. 独家揭秘影响SEO排名的17项核心因素
  14. Python大屏看板最全教程之数据库连接
  15. 《卫报》评全球最具影响力博客50强 徐静蕾入选
  16. “大数据应用场景”之隔壁老王(连载一)
  17. 计算机显示适配器禁用了电脑黑屏,Win10电脑禁用集成显卡后黑屏如何解决_Win10系统禁用集成显卡后黑屏解决方案...
  18. 审稿意见回复信英文模板和语料总结
  19. java学习思维导图(详细)
  20. S02_CH15_ AXI_OLED 实验

热门文章

  1. Nodejs: TypeError: The super constructor to “inherits“ must not be null or undefined
  2. 微信公众号服务器页面模板,GitHub - devsnippet/wechat-third-server: 使用 ThinkPHP、Vue 搭建一个带有后台的微信公众号第三方服务器的基础模板...
  3. 微信公众号第三方授权获取用户的的地理位置--坑
  4. python ai 教学_【Python AI教学】从零开始学Python AI开发系列01
  5. JavaScript系列—一道十面埋伏的原型链面试题
  6. 简单NPC和智能NPC
  7. 鹤壁高中2021年高考成绩查询,2021鹤壁市地区高考成绩排名查询,鹤壁市高考各高中成绩喜报榜单...
  8. IDEA中导入之前的web项目.完整篇.并解决了导入后项目的类全是橙色的J的角标的问题
  9. Docker 3.2.8:基于 Dockerfile 制作 JDK 镜像
  10. msgpack原理分析