一、简介

FFT(Fast Fourier transform):快速傅里叶变换,是DFT的工程化实现方法。
DFT直接求解太过于复杂,FFT方法根据DFT求解过程中旋转因子的性质并引入分治算法思想,大大简化计算过程,被广泛应用在频谱分析的工程实践中,如matlab,C,C++,CUDA等底层实现

1 DFT简介
频谱分析是信号处理中的重要环节,从傅里叶变换FT,到拉普拉斯变换LT,离散时间傅里叶变换DTFT,Z变换ZT,到我们所讲的离散傅里叶变换DFT(他们之间的联系和区别见我的其他博客)。
相比于其他变换,DFT被广泛应用的原因是其输入的时域信号是离散的,输出的频域结果也是离散的。这就极大方便了我们进行基于计算机的频谱计算,存储和分析,没办法数字信号处理是大趋势。
​ DFT变换的公式为:


但为了分析方便,在FFT的计算过程中,我们依然使用k = 0 ∼ N − 1 k = 0 \sim N-1k=0∼N−1的选取策略。也即,如下:

2 旋转因子WWW的性质

3 FFT蝶形计算证明






4 FFT计算过程

二、源代码

function varargout = fft_encoding(varargin)
% FFT_ENCODING M-file for fft_encoding.fig
%      FFT_ENCODING, by itself, creates a new FFT_ENCODING or raises the existing
%      singleton*.
%
%      H = FFT_ENCODING returns the handle to a new FFT_ENCODING or the handle to
%      the existing singleton*.
%
%      FFT_ENCODING('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in FFT_ENCODING.M with the given input arguments.
%
%      FFT_ENCODING('Property','Value',...) creates a new FFT_ENCODING or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before fft_encoding_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to fft_encoding_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help fft_encoding% Last Modified by GUIDE v2.5 18-Jun-2009 20:05:02% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @fft_encoding_OpeningFcn, ...'gui_OutputFcn',  @fft_encoding_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin & isstr(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before fft_encoding is made visible.
function fft_encoding_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to fft_encoding (see VARARGIN)
cr = 0.5;
I = imread('lena.bmp');
axes(handles.axes1);
imshow(I);
I = double(I)/255;
fftcoe = blkproc(I,[8 8],'fft2(x)');
coevar = im2col(fftcoe,[8 8],'distinct');
coe = coevar;
[y,ind] = sort(coevar);
[m,n] = size(coevar);
snum = 64-64*cr;
for i = 1:ncoe(ind(1:snum),i) = 0;
end
B2 = col2im(coe,[8 8],[512 512],'distinct');
I2 = blkproc(B2,[8,8],'ifft2(x)');
axes(handles.axes2);
imshow(I2);
e = double(I) - double(I2);
[m,n]=size(e);
erms = sqrt(sum(e(:).^2)/(m*n));
set(handles.erms_edit,'string',erms);
set(handles.cr_edit,'string',0.5);
% Choose default command line output for fft_encoding
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes fft_encoding wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = fft_encoding_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes during object creation, after setting all properties.
function image_pop_menu_CreateFcn(hObject, eventdata, handles)
% hObject    handle to image_pop_menu (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispcset(hObject,'BackgroundColor','white');
elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end% --- Executes on selection change in image_pop_menu.
function image_pop_menu_Callback(hObject, eventdata, handles)
% hObject    handle to image_pop_menu (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
val = get(hObject,'value');
str = get(hObject,'string');
cr = str2num(get(handles.cr_edit,'string'));
switch str{val}case 'Lena'I = imread('lena.bmp');case 'Cameraman'I = imread('cameraman.tif');case 'Peppers'I = imread('peppers.bmp');case 'Fingerprint'I = imread('fingerprint.jpg');case 'Licenceplate'I = imread('licenceplate.jpg');case 'Cloudy'I = imread('cloudy.tif');
end
axes(handles.axes1);
imshow(I);
I = double(I)/255;
fftcoe = blkproc(I,[8 8],'fft2(x)');
coevar = im2col(fftcoe,[8 8],'distinct');
coe = coevar;
[y,ind] = sort(coevar);
[m,n] = size(coevar);
snum = 64-64*cr;
for i = 1:ncoe(ind(1:snum),i) = 0;
end
B2 = col2im(coe,[8 8],size(I),'distinct');
I2 = blkproc(B2,[8,8],'ifft2(x)');
axes(handles.axes2);
imshow(I2);
e = double(I) - double(I2);
[m,n]=size(e);
erms = sqrt(sum(e(:).^2)/(m*n));
set(handles.erms_edit,'string',erms);
clc;
% Hints: contents = get(hObject,'String') returns image_pop_menu contents as cell array
%        contents{get(hObject,'Value')} returns selected item from image_pop_menu% --- Executes during object creation, after setting all properties.
function cr_edit_CreateFcn(hObject, eventdata, handles)
% hObject    handle to cr_edit (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispcset(hObject,'BackgroundColor','white');
elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
endfunction cr_edit_Callback(hObject, eventdata, handles)
% hObject    handle to cr_edit (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of cr_edit as text
%        str2double(get(hObject,'String')) returns contents of cr_edit as a double% --- Executes on button press in apply_button.
function apply_button_Callback(hObject, eventdata, handles)
% hObject    handle to apply_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
cr = str2num(get(handles.cr_edit,'string'));
I = getimage(handles.axes1);
I = double(I)/255;
fftcoe = blkproc(I,[8 8],'fft2(x)');
coevar = im2col(fftcoe,[8 8],'distinct');
coe = coevar;
[y,ind] = sort(coevar);
[m,n] = size(coevar);
snum = 64-floor(64*cr);
for i = 1:ncoe(ind(1:snum),i) = 0;
end
B2 = col2im(coe,[8 8],size(I),'distinct');
I2 = blkproc(B2,[8,8],'ifft2(x)');
axes(handles.axes2);
imshow(abs(I2));
e = double(I) - double(I2);
[m,n]=size(e);
erms = sqrt(sum(e(:).^2)/(m*n));
set(handles.erms_edit,'string',erms);
% --- Executes on button press in close_button.
function close_button_Callback(hObject, eventdata, handles)
% hObject    handle to close_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
close(fft_encoding);

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【图像压缩】基于matlab GUI FFT图像压缩【含Matlab源码 843期】相关推荐

  1. 【信号处理】基于Matlab GUI数字均衡器设计,源码附上

    [信号处理]基于Matlab GUI数字均衡器设计,源码附上 数字均衡器是一种常用于音频信号处理的技术,可以有效地补偿声音中的频率失真,提高音质.在这篇文章中,我们将介绍如何使用Matlab GUI进 ...

  2. 【过程控制】基于matlab GUI串级控制【含Matlab源码 2385期】

    ⛄一.简介 1 交互系统整体外观展示 该系统基于 MATLAB GUI 与 Simulink 联合开发, 实现对串级控制系统特性的研究与分析.学生在学习串级控 制有关知识后可使用该应用进行知识回顾.界 ...

  3. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  4. 【数字信号】基于matlab GUI多音双频(DTMF)拨号音频解码仿真系统【含Matlab源码 1084期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号]基于matlab GUI多音双频(DTMF)拨号音频解码仿真系统[含Matlab源码 1084期] 点击上面蓝色字体,直接付费 ...

  5. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理]基于matlab GUI多功能图像处理系统[含Matlab源码 1876期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  6. 【图像去噪】基于matlab GUI butterworth+中值+维纳+小波图像去噪【含Matlab源码 520期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab GUI butterworth+中值+维纳+小波图像去噪[含Matlab源码 520期] 获取代码方式2: ...

  7. 【机械仿真】基于matlab GUI曲柄摇杆机构运动仿真【含Matlab源码 1608期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI曲柄摇杆机构运动仿真[含Matlab源码 1608期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  8. 【电力预测】基于matlab GUI灰色模型电力负荷预测【含Matlab源码 769期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [电力负荷预测]基于matlab GUI灰色模型电力负荷预测[含Matlab源码 769期] 获取代码方式2: 通过订阅紫极神光博客付费专 ...

  9. 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  10. 【芯片识别】基于matlab GUI形态学PCB板芯片识别【含Matlab源码 1820期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[芯片识别]基于matlab GUI形态学 PCB板芯片识别[含Matlab源码 1820期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

最新文章

  1. 解决Android studio 非法字符的问题
  2. ASP.Net上传文件带进度条、显示剩余时间!
  3. EE JSP:使用JSTL标记库生成动态内容
  4. 台湾游戏企业抢滩大陆 研发成竞争核心
  5. LeetCode66——Plus One(一个整数用数组存储,然后在末尾加1)
  6. 怎么画韦布尔分布_手机按键寿命测试的样本数量怎么定?一文看懂 简述威布尔分布及其应用...
  7. 谷歌开源BoTNet | CNN与Transformer结合!Bottleneck Transformers for Visual Recognition!CNN+Transformer!
  8. [转]《谁让你是飞鸟我是鱼》by(晨曦)
  9. python图层合并_Python 2种方法实现叠加矩形框图层
  10. cuda10安装_Mmdetection的安装和使用
  11. 凌晨3点不回家:因为想不到的心酸!
  12. word插入和删除水印
  13. 常见嵌入式WEB服务器
  14. openocd Win10安装jlink->winUSB失败
  15. tof相机简介及三维坐标转化,plotly画3D点云
  16. easyExcel实现单sheet多子表,并结合动态表头,复杂表头
  17. 人月神话 中文版 pdf
  18. matlab语言帮助系统题目,西电 matlab语言考试题2009年
  19. ElasticSearch自定义分析器(custom analyzer)
  20. 使用keytool生成证书和秘钥

热门文章

  1. 初识Git 如何使用Git将本地项目上传到Github
  2. 小甲鱼C++笔记(上)1-24
  3. 自动生成小学四则运算题目(加强版)
  4. WinAPI: wvsprintf 与 wsprintf - Windows 的格式化输出函数
  5. The Seven Tools of Causal Inference, with Reflections on Machine Learning
  6. 190121每日一句
  7. Atitit 信息安全常见基础技术 目录 1. 加密 1 2. 签名(防篡改) 1 2.1. 第4章 标识与认证技术  1 2.2. 第5章 授权与访问控制技术  1 2.3. 第9章 安全审计与责
  8. Atitit ever note org log t99 目录 1. data 1 2. Sik dsk zip mode 1 3. Local exted stat 2 4. Recy 3 1
  9. Atitit  信息管理 艾提拉著作 CAPT1信息源数据源 目录 1. 数据元的数据格式 图片 文本 视频 音频 2 2. 按照应用功能使用分类 2 2.1. Diary Cyarlog 2
  10. Atitit 人工智能目前的进展与未来 包含的技术 v3