图像傅里叶变换的MATLAB实现

本文基于《MATLAB图像处理实例详解》[杨丹,赵海滨,龙哲]2013年版

文章目录

  • 图像傅里叶变换的MATLAB实现
    • 图像的二维离散傅里叶变换
    • 傅里叶变换后平移
    • 变亮后进行傅里叶变换
    • 旋转后进行傅里叶变换
    • 添加高斯噪声
    • 傅里叶反变换

图像的二维离散傅里叶变换

图像的二维离散傅立叶变换,代码如下

% 读入图片
I = imread("img/test1.png");% 变换之后为 complex double类型
J = fft2(I);% double类型
K = abs(J/256);figure;
subplot(121); imshow(I); % 显示图像
subplot(122); imshow(uint8(K)); % 显示频谱图

为什么要除以256 ?

首先将图片数据转化为实数类型。这一步将0-255的像素值转化为0.0-1.0范围内的实数。大多数图像处理API支持整数和实数类型的输入。如果输入是整数类型,这些API会在内部将输入转化为实数后处理,再将输出转化为整数。如果有多个处理步骤,在整数和实数之间的反复转化将导致精度损失,因此推荐在图像处理前将其转化为实数类型

imshow(uint8(K)); 为什么要将图片转化为uint8形式?

matlab中,常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。

在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。

如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0 ~ 255范围。

而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。

傅里叶变换后平移

% 读入图片
I = imread("img/test1.png");
% 傅里叶变换
J = fft2(I);
% 类型转换
K = abs(J/255);
% 对原图像进行平移
K = fftshift(K);
figure;
subplot(121); imshow(I); title('原图像');
subplot(122); imshow(uint8(K)); title('傅里叶变换平移之后的图像');

变亮后进行傅里叶变换

% 读取图像
R = imread("img/test2.png");
% 将图片变为灰度图像
I = rgb2gray(R);
% 将图像变亮,因为I为uint8类型,所以不用担心超出255的范围。
I1 = I * exp(1);
% 进行傅里叶变换
J1 = fft2(I); % 原图
J2 = fft2(I1); % 变亮后
% 转换
K1 = abs(J1/255);% 原图
K2 = abs(J2/255);% 变亮后
% 图像平移
K1 = fftshift(K1); % 原图
K2 = fftshift(K2); % 变亮后
figure;
subplot(221); imshow(R); title('原图像');
subplot(222); imshow(I); title('灰度图像');
subplot(223); imshow(uint8(K1)); title('傅里叶变换平移之后的图像');
subplot(224); imshow(uint8(K2)); title('变亮之后的图像');

旋转后进行傅里叶变换

% 读取图像
R = imread("img/test2.png");
% 将图片变为灰度图像
I = rgb2gray(R);
% 将图像逆时针45度旋转
I1 = imrotate(I, 45, 'bilinear');
% 进行傅里叶变换
J1 = fft2(I); % 原图
J2 = fft2(I1); % 平移后
% 转换
K1 = abs(J1/255);% 原图
K2 = abs(J2/255);% 平移后
% 图像平移
K1 = fftshift(K1); % 原图
K2 = fftshift(K2); % 平移后
figure;
subplot(221); imshow(R); title('原图像');
subplot(222); imshow(I); title('灰度图像');
subplot(223); imshow(uint8(K1)); title('傅里叶变换平移之后的图像');
subplot(224); imshow(uint8(K2)); title('平移之后的图像');

添加高斯噪声

% 读取图像
R = imread("img/test2.png");
P1 = R; % 原彩色图像
% 将图片变为灰度图像
I = rgb2gray(R);
P3 = I;
% 添加高斯噪声
I1 = imnoise(I, 'gaussian', 0, 0.03);
P2 = imnoise(R, 'gaussian', 0, 0.03);
P4 = I1;
% 进行傅里叶变换
J1 = fft2(I); % 原图
J2 = fft2(I1); % 添加后
% 转换
K1 = abs(J1/255);% 原图
K2 = abs(J2/255);% 添加后
% 图像平移
K1 = fftshift(K1); % 原图
K2 = fftshift(K2); % 添加后
figure;
subplot(321); imshow(P1); title('原图像');
subplot(322); imshow(P2); title('高斯噪声');
subplot(323); imshow(P3); title('原图像');
subplot(324); imshow(P4); title('高斯噪声');
subplot(325); imshow(uint8(K1)); title('原图像');
subplot(326); imshow(uint8(K2)); title('高斯噪声');

傅里叶反变换

% 读取图像
R = imread("img/test2.png");
% 将图片变为灰度图像
I = rgb2gray(R);
% 进行傅里叶变换
J = fft2(I);
% 图像平移
L = fftshift(J);
% 平移回来
M = ifftshift(L);
% 傅里叶反变换
M = ifft2(M);figure;
subplot(121); imshow(I); title('原图');
subplot(122); imshow(uint8(M)); title('反变换');

图像傅里叶变换的MATLAB实现相关推荐

  1. 傅里叶变换的Matlab代码

    原文:http://blog.csdn.net/xiaofengsheng/article/details/5991680 傅里叶变换的Matlab代码: img=imread('e:/4.jpg') ...

  2. matlab 二重傅里叶积分,傅里叶积分、傅里叶变换的matlab实现.doc

    傅里叶积分.傅里叶变换的matlab实现.doc PAGE PAGE 1 院 校: 物理与电子科学学院 班 级: 0801 班 姓 名: 目 录 1. 引言---------------------- ...

  3. matlab计算正交变换,图像的正交变换matlab.pdf

    图像的正交变换matlab <数字图像处理>课程实验报告 实验名 :图像的正交变换实验 1 院系: 自动化测试与控制系 班级: 1201132 姓名: 李丹阳 学号: 1120110113 ...

  4. 关于通用雷达信号的时频分析与图像绘制(Matlab)

    关于通用雷达信号的时频分析与图像绘制(Matlab) 最近在研究雷达信号的调制识别,所以对通用的雷达信号种类进行了时频域上的研究,下面小结给大家,从信号的原理到matlab的时频图绘制. 信号种类 这 ...

  5. [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解

    祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...

  6. 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验

    图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...

  7. 图像转置的MATLAB和OpenCV源码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 注意,图像转置和图像旋转是两回事,图像转置只是把 ...

  8. matlab图像相加例子,MATLAB图像处理例子

    MATLAB图像处理例子 clc;clear all;close all; a = imread( railway_05.jpg ); b = rgb2gray(a); c = im2bw(b,240 ...

  9. 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...

  10. 通俗讲解:图像傅里叶变换

    转自某乎:通俗讲解:图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换,但是我们首先来看一张很厉害的一维傅里叶变换动图. 妈耶~厉害哇!它把时域和频域解释的很清楚! 什么!你看不懂! 简 ...

最新文章

  1. Oracle再发力,区块链平台多项更新
  2. mybaits if判断进入不了
  3. HTTP与HTTPS——密码学笔记(九)
  4. PXC 部署前置检查
  5. Maven的优势举例
  6. 一文详解Serverless架构模式
  7. 在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下
  8. 使用java代码发送zip文件到邮箱_Azkaban安装与使用(下)
  9. SNMP协议交互学习-获取udp的udpindatagrams
  10. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_03maven一键构建概念
  11. 软考分类精讲-软件管理
  12. 远程访问树莓派的摄像头实现远程监控
  13. 程序员搞什么副业好?
  14. 【Netty - 解码器】did not read anything but decoded a message 异常
  15. Win10、Win7定时开关机
  16. MES系统读取MySQL数据_MES系统数据库
  17. 定了,“518囤币日”来了!囤币者,永不孤单!
  18. ZEN mining
  19. python毕业设计作品基于django框架个人博客系统毕设成品(6)开题答辩PPT
  20. Tomcat7 session 持久化关闭

热门文章

  1. 尚学堂马士兵servlet/JSP笔记(一、Http协议及WebApp初步)
  2. 【质量管理】41页PPT系统学习质量管理体系!
  3. 数据库时间相减_sql中两个时间类型相减得到的值
  4. JAVA办公管理系统(OA)
  5. android 样式 下载,VolumeStyles软件下载官方
  6. vlan的基本指令_vlan划分命令
  7. 连点器---鼠标连续点击(c语言)
  8. fscan扫描工具安装
  9. 我的第一个MASM32程序(MASM32环境配置)
  10. 飞信2008内测版下载